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