本文提供ansible-playbooks用來幫助讀者用ansible構建二進制kubernetes1.14,html
集羣包含calico、nginx-ingress、HAnode
提供資源有kubernetes-1.14二進制安裝包、docker18/rpm包、calico所需鏡像、nginx-ingress所需鏡像、cfssl包等nginx
執行tree /root/tmp/ansible-playbooks 能夠在files目錄下查看所需資源,後續會繼續完善本文docker
資源地址:https://pan.baidu.com/s/1KAUOY7NWnGXrDmqSd1LVPA 密碼:nhblshell
後續會繼續詳寫nfs、ceph、hostpath等volum;基於POD運行的registry鏡像倉庫;calico、ingress詳解;ELK;federationv2聯邦多集羣管理等,有興趣的小夥伴能夠加入探討!api
!!!注意⚠️服務器
生產環境建議如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根據資源自行判斷,服務器配置根據服務需求進行調整。網絡
一、etcd節點x3 : 注意etcd必須是奇數個節點app
二、master節點x3 : 沒有奇數偶數的限制,後面能夠根據實際狀況再增長節點數,運維
三、node節點x1: 真正應用負載的節點,後面能夠根據實際狀況很方便的增長節點數
本文爲了展現,服務器配置以下:
在每臺節點上執行:
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
定義變量,關閉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
for host in $ms $ns; do ssh $host "hostnamectl set-hostname $host"; Done
解壓
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
for host in $ms $ns; do ssh $host "sh /root/tmp/nodePrepare.sh"; done
注意:若配置未生效,重啓機器生效
設置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免祕是否執行成功。
設置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
在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
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
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等,有興趣的小夥伴能夠加入探討。
哪裏有不懂能夠私我!歡迎打擾