关于ansible:用ansible脚本安装rancher和k8s集群

41次阅读

共计 6623 个字符,预计需要花费 17 分钟才能阅读完成。

一、服务器布局

ip fqdn hostname config
192.168.126.10 rancher.k8s.example.com rancher 治理负载 4 -4
192.168.126.11 jwxt.k8s.example.com jwxt 利用负载 4 -4
192.168.126.12 harbor.k8s.example.com harbor 4-8
192.168.126.20 rancher1.k8s.example.com rancher1 4-8
192.168.126.21 rancher2.k8s.example.com rancher2 4-8
192.168.126.22 rancher3.k8s.example.com rancher3 4-8
192.168.126.30 k8s01.k8s.example.com k8s01 4-8
192.168.126.31 k8s02.k8s.example.com k8s02 4-8
192.168.126.32 k8s03.k8s.example.com k8s03 4-8
192.168.126.40 docker01.k8s.example.com docker01 12-16
192.168.126.41 docker02.k8s.example.com docker02 12-16
192.168.126.42 docker03.k8s.example.com docker03 12-16
192.168.126.50 nfs.k8s.example.com nfs 4-4
192.168.126.51 oracle.k8s.example.com oracle 8-32

以下所有操作都已配置好 eams 用户,且 eams 用户具备 sudo 权限

yum install sudo -y

useradd eams

echo abc123 | passwd --stdin eams

usermod eams -aG wheel



vim /etc/sudoers

NOPASSED:ALL

二、配置 ansible 环境

以下所有操作都在 rancher(nginx 负载)的主机上进行

2.1 批改 hosts 文件

sudo vim /etc/hosts

hosts 文件(示例)

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.126.10  rancher.k8s.example.com  rancher
192.168.126.11  app.k8s.example.com  app
192.168.126.12  harbor.k8s.example.com  harbor
192.168.126.20  rancher1.k8s.example.com  rancher1
192.168.126.21  rancher2.k8s.example.com  rancher2
192.168.126.22  rancher3.k8s.example.com  rancher3
192.168.126.30  k8s01.k8s.example.com  k8s01
192.168.126.31  k8s02.k8s.example.com  k8s02
192.168.126.32  k8s03.k8s.example.com  k8s03
192.168.126.40  docker01.k8s.example.com  docker01
192.168.126.41  docker02.k8s.example.com  docker02
192.168.126.42  docker03.k8s.example.com  docker03
192.168.126.50  nfs.k8s.example.com  nfs

用命令 ping 主机名,如 ping nfs,测试配置胜利

2.2 装置 ansible

sudo yum install epel-release -y
sudo yum install ansible -y

2.3 下载 ansible 脚本

https://e.coding.net/supwisdo…

拷贝至 /home/eams 目录下 ansibe

2.4 编辑 inventory 文件

cd /home/eams/ansible/
vim inventory 

inventory 文件(示例)

绿色的名字不能更改,主机可依据理论须要增减

[nginxs]
rancher
jwxt

[nginxs1]
rancher

[nginxs2]
jwxt

[harbors]
harbor

[ranchers]
rancher1
rancher2
rancher3

[k8ss]
k8s01
k8s02
k8s03

[dockers]
docker01
docker02
docker03

[nfss]
nfs

[appservers:children]
ranchers
k8ss
dockers
harbors



2.6 设置 SSH 免登

ssh-keygen

所有提醒都间接按回车,生成胜利后,逐条执行以下命令,过程中须要输出 yes 以及对应主机的 eams 用户明码

ssh-copy-id eams@nginx1
ssh-copy-id eams@nginx2
ssh-copy-id eams@harbor
ssh-copy-id eams@rancher1
ssh-copy-id eams@rancher2
ssh-copy-id eams@rancher3
ssh-copy-id eams@k8s01
ssh-copy-id eams@k8s02
ssh-copy-id eams@k8s03
ssh-copy-id eams@docker01
ssh-copy-id eams@docker02
ssh-copy-id eams@docker03
ssh-copy-id eams@nfs

2.7 测试 ansible 环境

cd /home/eams/ansible/
ansible all -m ping

返回值 success 示意 ansible 环境搭建胜利

三、配置操作系统环境

以下所有操作都在 rancher 的 nginx 主机上进行

3.1 散发 hosts 文件

cd /home/eams/ansible/
# 能够将以后主机上的 hosts 文件拷贝,也能够间接编辑 ansible 目录中的 hosts.j2 文件
cp /etc/hosts /home/eams/ansible/hosts.j2
ansible-playbook hosts.yml
# 验证
ansible all -m shell -a 'cat /etc/hosts'

3.2 更换 yum 源

cd /home/eams/ansible/
ansible-playbook yum.yml
# 验证
ansible all -m shell -a 'ls -l /etc/yum.repos.d/'

3.3 降级零碎内核(可选)

cd /home/eams/ansible/
# 更新除 nginx1 之外的所有主机内核,更新实现后主动重启
ansible-playbook kernel1.yml
# 验证所有虚拟机是否启动胜利
ansible all -m ping
# 更新 nginx1 主机内核
ansible-playbook kernel2.yml
# 重启
reboot
# 验证内核是否降级胜利
ansible all -m shell -a 'uname -a' 

如果 uname -r 内核曾经是 3.10 及以上,本步骤能够疏忽

3.4 装置软件

cd /home/eams/ansible/
ansible-playbook soft.yml 

更新内核和装置软件工夫比拟长,急躁期待。如果过程中卡住了,ctrl+ c 终止过程,而后从新一遍脚本,直至返回胜利

3.5 敞开 firewalld 和 selinux

cd /home/eams/ansible/
ansible-playbook firewalld.yml 

# 长期敞开
ansible all -m shell -a 'setenforce 0'

#永恒敞开 selinux 须要重启(也可稍后重启)#ansible "nginxs2 appservers nfss" -m shell -a 'reboot'
#ansible nginxs1 -m shell -a 'reboot'

# 验证
ansible all -m shell -a 'systemctl status firewalld' 
ansible all -m shell -a 'sestatus' 

3.6 设置时钟同步

cd /home/eams/ansible/
vim timesync.yml 

timesync 文件

---
- name: time sync
  hosts: all
  tasks:
    - name: Install and configure chrony
      include_role:
        name: unxnn.chrony
      vars:
        chrony_config_server:
          - ntp.aliyun.com
        chrony_timezone: Asia/Shanghai

批改 ntp.aliyun.com 为学校的时钟服务器地址,保留退出

cd /home/eams/ansible/
ansible-playbook timesync.yml
# 验证
ansible all -m shell -a 'timedatectl' 

3.7 设置语言环境(可选)echo

# 查看所有主机的语言环境是否是 en_US.UTF-8
ansible all -m shell -a 'echo $LANG'

#(可选 ) 如果语言环境不是 en_US.UFT-8
cd /home/eams/ansible/
ansible-playbook lang.yml

如果你从新设置了语言环境变量,在现有关上的终端窗口 echo $LANG 还是未修改之前的,必须从新开启一个终端才会是批改后的

3.8 内核模块优化

cd /home/eams/ansible/
ansible-playbook core.yml
# 验证,抽查其中一个模块是否加载胜利
ansible all -m shell -a 'lsmod | grep veth'

3.9 敞开 SWAP 分区

cd /home/eams/ansible/
ansible-playbook swap.yml
# 验证
ansible appservers -m shell -a 'free -m'

3.10 NFS 的服务端装置

cd /home/eams/ansible/
ansible-playbook nfs.yml
# 验证
ansible nfss -m shell -a 'showmount -e localhost' 

3.11 重启

至此,将所有主机重启,察看是否失常启动,若有问题,查看解决

ansible "nginxs2 appservers nfss" -m shell -a 'reboot'
ansible nginxs1 -m shell -a 'reboot'

四、集群装置

以下所有操作都在 rancher 的 nginx 主机上进行

4.1 Docker 装置

cd /home/eams/ansible/
ansible-playbook docker1.yml
# 验证 有 client 显示示意失常
ansible appservers -m shell -a 'docker version'

client 失常,server 报错是失常的

4.2 Docker 配置

cd /home/eams/ansible/
ansible-playbook docker2.yml
# 验证
ansible appservers -m shell -a 'docker version'

client 失常,server 也失常,示意装置胜利

4.3 rancher 的 nginx 装置

cd /home/eams/ansible/
ansible-playbook nginx1.yml

4.4 rancher 的 nginx 配置

cd /home/eams/ansible/
ansible-playbook nginx2.yml

如果 nginx 服务器超过 4 个 CPU,须要编辑 nginx.conf.j2 模板文件后,再执行下面的 nginx2 脚本呢

4.4 装置 kubectl

cd /home/eams/ansible/
ansible-playbook kubectl.yml

#验证
kubectl version 

4.5 装置 RKE

cd /home/eams/ansible/
ansible-playbook rke.yml
# 验证
rke -v

4.6 RKE 在 rancher 上装置 K8S

cd /home/eams/ansible/
ansible-playbook rancher.yml

运行 RKE 创立集群

rke up --config /home/eams/rancher/rancher-cluster.yml

# 验证,呈现 Finished building Kubernetes cluster successfully 示意胜利 

设置环境变量

echo "export KUBECONFIG=/home/eams/rancher/kube_config_rancher-cluster.yml" >> ~/.bash_profile
source ~/.bash_profile

执行以下命令,看是否胜利

kubectl get nodes
kubectl get pods --all-namespaces
kubectl get pods -n kube-system

4.7 装置 Helm

cd /home/eams/ansible/
ansible-playbook helm.yml
# 验证
helm version

4.8 创立 SSL 私钥

cd /home/eams/ansible/
ansible-playbook ssl.yml

以上命令会返回 result.stdout

# 切换到 ssl 目录
cd /home/eams/ssl/

# 复制 result.stdout 的后果执行,以下命令是参考,不要间接执行
./create_self-signed-cert.sh  --ssl-domain=***  --ssl-trusted-ip=***  --ssl-size=2048   --ssl-date=3650

验证是否胜利

openssl verify -CAfile cacerts.pem tls.crt # 应该返回状态为 tls.crt: ok
openssl x509 -in tls.crt -noout -text #执行后查看对应的域名和扩大 iP 是否正确

4.9 装置 rancher

cd /home/eams/ssl
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
helm repo update

kubectl create namespace cattle-system

kubectl -n cattle-system create     secret tls tls-rancher-ingress     --cert=./tls.crt --key=./tls.key
kubectl -n cattle-system create secret     generic tls-ca     --from-file=cacerts.pem

# 上面命令须要批改域名后运行
helm install rancher rancher-stable/rancher     --namespace cattle-system     --set hostname=**rancher.k8s.example.com**      --set ingress.tls.source=secret     --set privateCA=true

#查看集群是否失常
kubectl -n cattle-system rollout status deploy/rancher
#查看 deployment 状态
kubectl -n cattle-system get deploy rancher
#查看运行的容器
kubectl -n cattle-system get pods
#查看运行容器的运行状态
kubectl -n cattle-system describe pod
#查看运行容器的运行日志
kubectl -n cattle-system logs -f rancher-7674bdcd95-4nxjm


#配置 host 拜访域名
rancher.k8s.example.com
 

视频教程地址:
https://www.ixigua.com/695436…

正文完
 0