当前位置 : 主页 > 网络安全 > 测试自动化 >

生产环境:ansible自动化部署kubernetes-1.14

来源:互联网 收集:自由互联 发布时间:2021-06-19
概述: 本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14, 集群包含calico、nginx-ingress、HA 提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingr

概述:

本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14,

集群包含calico、nginx-ingress、HA

提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingress所需镜像、cfssl包等

执行tree /root/tmp/ansible-playbooks 可以在files目录下查看所需资源,后续会继续完善本文

资源地址:https://pan.baidu.com/s/1AeKi_qvU6jwgyLl18mcx9w?密码:8xm0

后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK;federationv2联邦多集群管理等,有兴趣的小伙伴可以加入探讨!

1.配置服务器环境

!!!注意??

?生产环境建议如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根据资源自行判断,服务器配置根据服务需求进行调整。

1、etcd节点x3 : 注意etcd必须是奇数个节点

2、master节点x3 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,

3、node节点x1: 真正应用负载的节点,后面可以根据实际情况很方便的增加节点数

本文为了展示,服务器配置如下:

1.1.修改每台节点DNS

在每台节点上执行:

cat <<EOF >> /etc/hosts
192.168.33.1??k8s-master1
192.168.33.2??k8s-master2
192.168.33.3??k8s-master3
192.168.33.4 ?k8s-node1
192.168.33.5 ?k8s-node2
192.168.33.6 ?k8s-node3
192.168.33.7 ?k8s-node4
192.168.33.8 ?k8s-node5
EOF

1.2.开启k8s-master1对所有节点免密访问

定义变量,关闭shell后该变量会消失需要重新执行

ms="k8s-master1 k8s-master2?k8s-master3"?&& oms="k8s-master2?k8s-master3"?&&ns="k8s-node1 "

生成并拷贝证书

ssh-keygen -t rsa?&& for i in?$ms $ns;?do ssh-copy-id -i ~/.ssh/id_rsa.pub $i;?done

1.3.修改所有节点主机名

for host in $ms $ns;?do
????ssh $host "hostnamectl set-hostname?$host";
Done

1.4.将ansible等资源上传到k8s-master1的~/tmp目录

解压
tar -zxvf ansible.tar.gz

将nodePrepare.sh拷贝到其他节点:

for host in $ms $ns;?do
????scp -r ~/tmp/nodePrepare,[email protected]$host:/root/tmp/nodePrepare.sh";
done

1.5.设置基础环境

for host in $ms $ns;?do
????ssh $host "sh /root/tmp/nodePrepare.sh";
done

注意:若配置未生效,重启机器生效

2.部署Kubernetes集群

2.1.部署ansible运维工具

设置ansible的部署节点:

cat>>/etc/ansible/hosts<<EOF
[master]
10.8.4.133
10.8.4.134
10.8.4.135
[node]
10.8.4.136
EOF

执行:
ansible all -m ping -u root?
如图所示

如果有失败节点,请检查ssh免秘是否执行成功。

2.2.开始部署docker、kubernetes集群组件、相应网络组件及镜像仓库

设置xxx/ansible-k8s/stage文件,更改环境地址。

根据自己的机器更改stage文件。

之后执行

ansible-playbook -i /root/tmp/ansible-playbooks/ansible-k8s/stage -u root /root/tmp/ansible-playbooks/ansible-k8s/kubernetes.yml

2.3.验证是否安装成功

在master节点执行如下命令

kubectl get cs

kubectl get nodes --all-namespaces

所有node状态为ready表示集群安装完成

kubectl get pod -n kube-system

calico 与 coredns? pod搭建成功

route -n 查看tunl0网络,成功,节点可以ping通podIP

kubectl get pod -n ingress-nginx

2.3.1.部署my-nginx服务,检测

vi my-nginx.yaml?
apiVersion: apps/v1
kind: Deployment*
metadata:
? name: my-nginx
spec:
? replicas: 2
? selector:
? ? matchLabels:
? ? ? k8s-app: my-nginx
? template:
? ? metadata:
? ? ? labels:
  ? ? ? k8s-app: my-nginx
? ? spec:
? ? ? containers:
? ? ? - name: my-nginx
? ? ? ? image: nginx:1.9
? ? ? ? ports:
? ? ? ? - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
? name: my-nginx
? labels:
? ? k8s-app: my-nginx
spec:
? type: NodePort
? ports:
? - port: 8080
? ? targetPort: 80
? ? protocol: TCP
? ? name: http
? - port: 443
? ? protocol: TCP
? ? name: https
? selector:
? ? k8s-app: my-nginx

2.3.2.部署my-nginx-ingress检测ingress?

vi my-nginx-ingress.yaml
apiVersion: extensions/v1beta1 
kind: Ingress
metadata:
? name: submodule-checker-ingress
spec:
? rules:
? - host: nginx.weave.pub
? ? http:
? ? ? paths:
? ? ? - backend:
? ? ? ? ? serviceName: my-nginx
? ? ? ? ? servicePort: 80
kubectl create -f?my-nginx-ingress.yaml &&?kubectl create -f?my-nginx.yaml
vi /etc/hosts

ingress部署成功

检验coredns可以部署busybox的pod,进入pod,用nslookup查看dns是否可以得到clusterIP

以上如有问题,可以通过kubectl describe pod XXX或者systemctl status XXX进行查看问题并解决,也可以journalctl -u XXX查看日志信息

由于网上资源资料太少,所以ansible脚本及资源均为个人手码,整理拿出提供大家参考,觉得有帮助的小伙伴给个赞哟!

后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK等,有兴趣的小伙伴可以加入探讨。

哪里有不懂可以私我!欢迎打扰

参考资料:

doc of ansible

使用Ansible + kubeadm部署K8S集群

二进制部署Kubernetes-v1.14.1集群

上一篇:K8S - Kubernetes简介
下一篇:爬去拉钩信息
网友评论