天天看點

使用Kubespray部署Kubernetes叢集

Kubespray是Google開源的一個部署生産級别的Kubernetes伺服器叢集的開源項目,它整合了Ansible作為部署的工具。項目位址: github.com/kubernetes-…

部署曆程

目前為止,對于Kubernetes叢集的部署,我隻談的上是一個入門者,涉及到了衆多的運維知識,對于一個開發來說,确實挺難的。萬事開頭難,好事多磨,經過一個多星期的反複嘗試,終于搭建好了。對比市面上的部署方式,主流的有三種方式。一是完全手動部署,非常的繁瑣,容易部署。二是采用kubeAdmin開源項目進行部署,這個也是谷歌官方開源的一個項目。三是 ,采用kubeSpray進行部署。我的理念是有好的工具當然是用好工具,是以手動部署是不可能的,完全排除,是以Kubeadmin和KubeSpray。而我對Ansibe這個運維元件興趣非常的大,是以我最終選擇了KubeSpray進行了部署。

部署的工程是非常艱難的,在我決定搞Kubernetes之時,為了學習不難麼枯燥和孤獨,我專門組建了一個群,找了一些朋友一起來學習和交流,采用的方式是大家一起學習,一起寫文檔,一起交流,另外有主機的出主機。是以,一開始的主機是幾個朋友自己的主機,不在一個區域網路内,計算機作業系統也不太一樣,這為後面的部署帶來了一個大坑。另外由于國内的屏蔽了谷歌的網絡,導緻谷歌的相關鏡像下載下傳不下來,這也是一個坑。

坑點1,不在一個區域網路不能部署Kubernetes?我專門打電話問了阿裡雲,客戶說不可以,是不是真的不可以,我是不确定的。另外叢集的型号不同和作業系統不同也會導緻失敗。

坑點2,長城屏蔽了谷歌的鏡像,是以我剛開始是根據谷歌的鏡像在阿裡雲鏡像倉庫一頓搜尋,導緻Kubernetes各個版本元件不相容,出現了問題。

現在我也這篇文章來詳細講解我的部署過程,供其他人參考,如果有其他人想加入我們的Kubernetes興趣群,加我微信miles02和我聯系。

主機相關

主機需要在同一區域網路内?是以我們重新租了三台機器,進行了操作。現在列舉主機相關的資訊如下:

主機 系統版本 配置 ip
Ansible CentOS 7.2 1核1G 172.31.84.154
Mater、Node 2核2G 172.31.84.155
Node 172.31.84.156

Ansible那台主機使用KubeSpray進行部署,這台機器不做Kubernetes相關叢集的部署。另外2台機器,一台既作為Master,又作為Node,另外一台是一個Node。

本次部署,使用的KubeSpray版本為v2.1.2。

Master、Node節點的操作

因為本次使用KubeSpray操作部署,是以所有的主機都需要關閉防火牆等相關的操作。

是以的主機都需要關閉selinux,執行的指令如下:

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
           

防火牆和網絡設定,所有的主機都執行以下指令:

systemctl stop firewalld
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1
           

這樣與Kubernetes叢集相關的叢集設定就完畢了。

Ansibe主機操作

Ansibe主機也需要關閉selinux和關閉防火牆以及網絡設定,同上面。

在Ansible主機上設定免密碼操作其它主機

首先生成ssh公鑰和私鑰。

ssh-keygen
           

按三次回車。

建立ssh通道,

ssh-copy-id [email protected] 将秘鑰分發給master主機。
ssh-copy-id [email protected]
           

安裝Ansible

安裝ansible和jinja2,安裝指令如下。

sudo yum install epel-release
sudo yum install ansible

easy_install pip
pip2 install jinja2 --upgrade

           

如果執行 pip2 install jinja2–upgrade 提示更新,則更新,再執行一次指令。

安裝python36

sudo yum install python36 -y 
           

在Ansible叢集上安裝KubeSpray

在ansible機器上下載下傳KubeSpray代碼,并解壓,執行如下的指令:

wget https://github.com/kubernetes-incubator/kubespray/archive/v2.1.2.tar.gz
tar -zxvf v2.1.2.tar.gz
mv kubespray-2.1.2 kuberspray
           

安裝KubeSpray所需的包

執行如下指令:

cd kubespray
pip install r requirements.txt           

定義叢集

執行以下的指令。

IP=(
172.31.84.155
172.31.84.156
)

CONFIG_FILE=./kubespray/inventory/inventory.cfg python36 ./kubespray/contrib/inventory_builder/inventory.py ${IP[*]           

vim ~./kubespray/inventory/inventory.cfg

[all]
node1 ansible_host=172.31.84.156 ip=172.31.84.156
node2 ansible_host=172.31.84.155 ip=172.31.84.155

[kube-master]
node1

[kube-node]
node1
node2

[etcd]
node1

[k8s-cluster:children]
kube-node
kube-master

[calico-rr]

[vault]
node1           

替換鏡像

在kuberspay源碼源代碼中搜尋包含 gcr.io/google_containers 和 quay.io 鏡像的檔案,并替換為我們之前已經上傳到阿裡雲的進行,替換腳步如下:

grc_image_files=(
./kubespray/extra_playbooks/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/extra_playbooks/roles/kubernetes-apps/ansible/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
./kubespray/roles/dnsmasq/templates/dnsmasq-autoscaler.yml
./kubespray/roles/kubernetes-apps/ansible/defaults/main.yml
)

for file in ${grc_image_files[@]} ; do
 sed -i 's/gcr.io\/google_containers/registry.cn-hangzhou.aliyuncs.com\/szss_k8s/g' $file
done

quay_image_files=(
./kubespray/extra_playbooks/roles/download/defaults/main.yml
./kubespray/roles/download/defaults/main.yml
)

for file in ${quay_image_files[@]} ; do
 sed -i 's/quay.io\/coreos\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/coreos-/g' $file
 sed -i 's/quay.io\/calico\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/calico-/g' $file
 sed -i 's/quay.io\/l23network\//registry.cn-hangzhou.aliyuncs.com\/szss_quay_io\/l23network-/g' $file
done
           

使用ansible playbook部署Kubernetes叢集

以上全部完成,執行安裝操作:

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa
           

大約過了10分鐘,如果順利的話,叢集會成功搭建。

驗證幾點是否成功

登入Kubernete叢集的Mater叢集,執行如下指令:

kubectl get no
           

控制台列印出了正确的Kubernetes節點資訊,則安裝成功。

增加節點

cd kubespray
ansible-playbook -i inventory/inventory.cfg cluster.yml -b -v --private-key=~/.ssh/id_rsa --limit node3
           

遇到問題解除安裝

ansible執行解除安裝操作:

ansible-playbook -i inventory/mycluster/hosts.ini reset.yml
           

安裝失敗清理Kubernetes機器

rm -rf /etc/kubernetes/
rm -rf /var/lib/kubelet
rm -rf /var/lib/etcd
rm -rf /usr/local/bin/kubectl
rm -rf /etc/systemd/system/calico-node.service
rm -rf /etc/systemd/system/kubelet.service
systemctl stop etcd.service
systemctl disable etcd.service
systemctl stop calico-node.service
systemctl disable calico-node.service
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
service docker restart           

本文轉自掘金-

使用Kubespray部署Kubernetes叢集