生产环境:ansible自动化部署kubernetes-1.14
本文内容排版不是特别的好,所以又重新排了一版(新版),代码\命令用起来会更舒适一些
概述:
本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14,
集群包含calico、nginx-ingress、HA
提供资源有kubernetes-1.14二进制安装包、docker18/rpm包、calico所需镜像、nginx-ingress所需镜像、cfssl包等
执行tree ansible-playbooks/k8s/ansible-k8s/ 可以在files目录下查看,后续会继续完善本文
百度网盘地址:https://pan.baidu.com/s/16leFGLZ-Jr-JShvZ8w6C_g 密码:3c75
github地址[https://github.com/yuenandi/k8s/tree/master](https://github.com/yuenandi/k8s/tree/master)
- 网盘下载需
1. 直接使用ansible-k8s.zip即可
2. 将`kubernetes-server-linux-amd64.tar.gz`复制到`ansible-k8s/roles/kube-apiserver/files/`
3. 在无外网情况需要下载镜像/image,执行`mv /image/file/* /ansible-k8s/roles/image/file`
- github下载需
1. 下载资源kubernetes-server-linux-amd64.tar.gz、etcd-v3.3.12-linux-amd64.tar.gz、docker-18.09.5.tar.gz、/image
2. `mv kubernetes-server-linux-amd64.tar.gz k8s/ansible-k8s/roles/kube-apiserver/files`
`mv etcd-v3.3.12-linux-amd64.tar.gz k8s/ansible-k8s/roles/etcd/files`
`mv docker-18.09.5.tar.gz k8s/ansible-k8s/roles/docker/files`
`mv /image/file/* /ansible-k8s/roles/image/file`
后续会继续详写nfs、ceph、hostpath等volum;基于POD运行的registry镜像仓库;calico、ingress详解;ELK;federationv2联邦多集群管理等,有兴趣的小伙伴可以加入探讨!
1.配置服务器环境
生产环境推荐配置!!!注意⚠️
生产环境建议如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根据资源自行判断,服务器配置根据服务需求进行调整。
etcd节点x3 : 注意etcd必须是奇数个节点
master节点x3 : 没有奇数偶数的限制,后面可以根据实际情况再增加节点数,
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,sh root@$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 如图所示
ansible成功图示如果有失败节点,请检查ssh免秘是否执行成功。
2.2.开始部署docker、kubernetes集群组件、相应网络组件及镜像仓库
设置stage文件,更改环境地址。
stage文件内容 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
master组件健康状态kubectl get nodes --all-namespaces
所有node状态为ready表示集群安装完成
各节点健康状态kubectl get pod -n kube-system
calico 与 coredns pod搭建成功
calico\coredns成功图示route -n 查看tunl0网络,成功,节点可以ping通podIP
rout -nkubectl get pod -n ingress-nginx
部署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
部署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
/etc/hosts文件内容 通过inggress访问podingress部署成功
检验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等,有兴趣的小伙伴可以加入探讨。