SaltStack自動化部署Kubernetes v1.9.3版本

SaltStack自動化部署Kubernetes v1.9.3版本(支持TLS 雙向認證、RBAC 授權、Flannel網絡、ETCD集羣等)
版本明細:Release-v1.0
測試通過系統:CentOS 7.4
salt-ssh: 2017.7.4
Kubernetes: v1.9.3
Etcd: v3.3.1
Docker: 17.12.1-ce
Flannel: v0.10.0
CNI-Plugins: v0.7.0 建議部署節點:最少三個節點,請配置好主機名解析(必備)
架構介紹
使用Salt Grains進行角色定義,增加靈活性。
使用Salt Pillar進行配置項管理,保證安全性。
使用Salt SSH執行狀態,不需要安裝Agent,保證通用性。
使用Kubernetes當前穩定版本v1.9.3,保證穩定性。

使用手冊
0.系統初始化
設置主機名!!!
設置/etc/hosts保證主機名能夠解析
關閉SELinux和防火牆
1.設置部署節點到其它所有節點的SSH免密碼登錄(包括本機)
[root@linux-node1 ~]# ssh-keygen -t rsa
[root@linux-node1 ~]# ssh-copy-id linux-node1
[root@linux-node1 ~]# ssh-copy-id linux-node2
[root@linux-node1 ~]# ssh-copy-id linux-node3
2.安裝Salt-SSH並克隆本項目代碼。
2.1 安裝Salt SSH
[root@linux-node1 ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@linux-node1 ~]# yum install -y salt-ssh git unzip

2.2 獲取本項目代碼,並放置在/srv目錄
[root@linux-node1 ~]# git clone https://github.com/unixhot/salt-kubernetes.git
[root@linux-node1 srv]# cd salt-kubernetes/
[root@linux-node1 srv]# mv * /srv/
[root@linux-node1 srv]# cd /srv/
[root@linux-node1 srv]# cp roster /etc/salt/roster
[root@linux-node1 srv]# cp master /etc/salt/master

2.4 下載二進制文件,也可以自行官方下載,爲了方便國內用戶訪問,請在百度雲盤下載。 下載完成後,將文件移動到/srv/salt/k8s/目錄下,並解壓 Kubernetes二進制文件下載地址: https://pan.baidu.com/s/1zs8sCouDeCQJ9lghH1BPiw
[root@linux-node1 ~]# cd /srv/salt/k8s/
[root@linux-node1 k8s]# unzip k8s-v1.9.3.zip
[root@linux-node1 k8s]# ls -l files/
total 0
drwxr-xr-x 2 root root 94 Mar 28 00:33 cfssl-1.2
drwxrwxr-x 2 root root 195 Mar 27 23:15 cni-plugins-amd64-v0.7.0
drwxr-xr-x 2 root root 33 Mar 28 00:33 etcd-v3.3.1-linux-amd64
drwxr-xr-x 2 root root 47 Mar 28 12:05 flannel-v0.10.0-linux-amd64
drwxr-xr-x 3 root root 17 Mar 28 00:47 k8s-v1.9.3

3.Salt SSH管理的機器以及角色分配
k8s-role: 用來設置K8S的角色
etcd-role: 用來設置etcd的角色,如果只需要部署一個etcd,只需要在一臺機器上設置即可
etcd-name: 如果對一臺機器設置了etcd-role就必須設置etcd-name
[root@linux-node1 ~]# vim /etc/salt/roster
linux-node1:
host: 192.168.137.172
user: root
priv: /root/.ssh/id_rsa
minion_opts:
grains:
k8s-role: master
etcd-role: node
etcd-name: etcd-node1

linux-node2:
host: 192.168.137.173
user: root
priv: /root/.ssh/id_rsa
minion_opts:
grains:
k8s-role: node
etcd-role: node
etcd-name: etcd-node2

linux-node3:
host: 192.168.137.174
user: root
priv: /root/.ssh/id_rsa
minion_opts:
grains:
k8s-role: node
etcd-role: node
etcd-name: etcd-node3
4.修改對應的配置參數,本項目使用Salt Pillar保存配置
[root@linux-node1 ~]# vim /srv/pillar/k8s.sls
#設置Master的IP地址(必須修改)
MASTER_IP: "192.168.137.172"

#設置ETCD集羣訪問地址(必須修改)
ETCD_ENDPOINTS: "https://192.168.137.172:2379,https://192.168.137.173:2379,https://192.168.137.174:2379"

#設置ETCD集羣初始化列表(必須修改)
ETCD_CLUSTER: "etcd-node1=https://192.168.137.172:2380,etcd-node2=https://192.168.137.173:2380,etcd-node3=https://192.168.137.174:2380"

#通過Grains FQDN自動獲取本機IP地址,請注意保證主機名解析到本機IP地址
NODE_IP: {{ grains['fqdn_ip4'][0] }}

#設置BOOTSTARP的TOKEN,可以自己生成
BOOTSTRAP_TOKEN: "ad6d5bb607a186796d8861557df0d17f"

#配置Service IP地址段
SERVICE_CIDR: "10.1.0.0/16"

#Kubernetes服務 IP (從 SERVICE_CIDR 中預分配)
CLUSTER_KUBERNETES_SVC_IP: "10.1.0.1"

#Kubernetes DNS 服務 IP (從 SERVICE_CIDR 中預分配)
CLUSTER_DNS_SVC_IP: "10.1.0.2"

#設置Node Port的端口範圍
NODE_PORT_RANGE: "20000-40000"

#設置POD的IP地址段
POD_CIDR: "10.2.0.0/16"

#設置集羣的DNS域名
CLUSTER_DNS_DOMAIN: "cluster.local."

5.執行SaltStack狀態
測試Salt SSH聯通性
[root@linux-node1 ~]# salt-ssh '*' test.ping

執行高級狀態,會根據定義的角色再對應的機器部署對應的服務

5.1 部署Etcd,由於Etcd是基礎組建,需要先部署,目標爲部署etcd的節點。
[root@linux-node1 ~]# salt-ssh -L 'linux-node1,linux-node2,linux-node3' state.sls k8s.etcd

5.2 部署K8S集羣
[root@linux-node1 ~]# salt-ssh '*' state.highstate
由於包比較大,這裏執行時間較長,5分鐘+,如果執行有失敗可以再次執行即可!

6.測試Kubernetes安裝(請新打開一個窗口,保證環境變量生效!)
[root@linux-node1 bin]# pwd
/opt/kubernetes/bin

[root@linux-node1 ~]# source /etc/profile
[root@k8s-node1 ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
etcd-2 Healthy {"health":"true"}
etcd-1 Healthy {"health":"true"}

[root@k8s-node1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
192.168.56.21 Ready <none> 1m v1.9.3
192.168.56.22 Ready <none> 1m v1.9.3

7.測試Kubernetes集羣和Flannel網絡
[root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000
deployment "net-test" created
需要等待拉取鏡像,可能稍有的慢,請等待。
[root@linux-node1 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
net-test-74f45db489-9hr74 1/1 Running 0 48s 10.2.43.2 192.168.56.22
net-test-74f45db489-rkfjs 1/1 Running 0 48s 10.2.59.2 192.168.56.21

測試聯通性
[root@linux-node1 ~]# ping -c 1 10.2.43.2
PING 10.2.43.2 (10.2.43.2) 56(84) bytes of data.
64 bytes from 10.2.43.2: icmp_seq=1 ttl=61 time=3.11 ms

--- 10.2.43.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.114/3.114/3.114/0.000 ms
[root@linux-node1 ~]# ping -c 1 10.2.59.2
PING 10.2.59.2 (10.2.59.2) 56(84) bytes of data.
64 bytes from 10.2.59.2: icmp_seq=1 ttl=61 time=1.23 ms

--- 10.2.59.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.230/1.230/1.230/0.000 ms
7.如何新增Kubernetes節點
1.設置SSH無密碼登錄
2.在/etc/salt/roster裏面,增加對應的機器
3.執行SaltStack狀態salt-ssh '' state.highstate。
[root@linux-node1 ~]# vim /etc/salt/roster
linux-node4:
host: 192.168.56.23
user: root
priv: /root/.ssh/id_rsa
minion_opts:
grains:
k8s-role: node
[root@linux-node1 ~]# salt-ssh '
' state.highstate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章