生產環境:ansible自動化部署kubernetes-1.14

概述:

本文提供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

1.配置服務器環境

image

!!!注意⚠️服務器

 生產環境建議如上配置,是否在master上部署kubelet\kube-proxy\docker\calico,可根據資源自行判斷,服務器配置根據服務需求進行調整。網絡

一、etcd節點x3 : 注意etcd必須是奇數個節點app

二、master節點x3 : 沒有奇數偶數的限制,後面能夠根據實際狀況再增長節點數,運維

三、node節點x1: 真正應用負載的節點,後面能夠根據實際狀況很方便的增長節點數

本文爲了展現,服務器配置以下:

image

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集羣組件、相應網絡組件及鏡像倉庫

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

ansible-k8s/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

cs

kubectl get nodes --all-namespaces

全部node狀態爲ready表示集羣安裝完成

node

kubectl get pod -n kube-system

calico 與 coredns  pod搭建成功

網絡組件

route -n 查看tunl0網絡,成功,節點能夠ping通podIP

cacilo

kubectl get pod -n ingress-nginx

ingress

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

host

nginx

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集羣

相關文章
相關標籤/搜索