概述:
本文提供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/1KAUOY7NWnGXrDmqSd1LVPA 密碼:nhbl
后續會繼續詳寫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,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
如圖所示

如果有失敗節點,請檢查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等,有興趣的小伙伴可以加入探討。
哪里有不懂可以私我!歡迎打擾
