今天來跑看看 Kyle Bai 大大的 kube-ansible 專案
在完成 Kyle Bai 大大的「利用 kubeadm 部署 Kubernetes v1.11.x HA 叢集」之後,
Kyle Bai 大大在2018/8/12又發表了一篇「開發 Ansible Playbooks 部署 Kubernetes v1.11.x HA 叢集」
https://kairen.github.io/2018/08/12/kubernetes/deploy/k8s-ansible-ha/
偶立馬變成小粉絲啦,我們先來跑看看,
再來學習Kyle Bai 大大是如何把 kubeadm 的諸多步驟寫到 Ansible Playbooks吧~
步驟的部分請直接看Kyle Bai 大大的文章,
我只列出執行的過程中遇到的問題,及排除方式
本來用一個ubuntu的vm跑,但cpu溫度會升很高
後來直接在 macOS 跑 vagrant up
有關ansible的安裝,之前就介紹過了,這邊要檢查的項目如下:
$ brew install http://git.io/sshpass.rb
只有 控制主機 (Control Machine) 需要裝ansible
在我們的實作中…
控制主機 (Control Machine) 是VM(各Node)的Host(媽媽)喔
$ sudo apt-get install -y software-properties-common git cowsay
$ sudo apt-add-repository -y ppa:ansible/ansible
$ sudo apt-get update && sudo apt-get install -y ansible
$ brew install ansible
以下操作都是在 控制主機 (Control Machine)
$ git clone https://github.com/kairen/kube-ansible.git
=====
我大概只改ip而已吧
大家可以直接跑看看,不work再來改ip
kube_version: 1.11.2 # 版本可以設新一點
[etcds]
172.16.35.[10:10] ansible_user=vagrant ansible_password=vagrant
[masters] # 你也可以嘗試2個master,試HA,這個專案應該沒問題
172.16.35.[10:10] ansible_user=vagrant ansible_password=vagrant
[nodes] # 如果你的電腦不太好,可以改成[11:11] 只開1台就好
172.16.35.[11:12] ansible_user=vagrant ansible_password=vagrant
[kube-cluster:children]
masters
nodes
def set_vbox(vb, config)
vb.gui = false
vb.memory = $system_memory
vb.cpus = $system_vcpus
case $os_image
when :ubuntu16
config.vm.box = "bento/ubuntu-18.04" # 改成18.04是ok的,18.10還沒試過
end
end
首先要用vagrant建vm
專案抓下來是用Ubuntu 16.04,如果你要試Ubunt 18.04,要編輯Vagrantfile
建議用root帳號跑
$ sudo su
$ ./hack/setup-vms >> 16-1.log # 通常會跑蠻久的,而且有很多fail,輸出到 log 慢慢看
用2013年的mbp i7跑,溫度大概70~90度,風扇切強一點嘿
$ vagrant halt # 停掉 3台 virtualbox vm
$ vagrant up
$ vagrant ssh k8s-m1 # 連到 k8s-m1
vagrant@k8s-m1:~$ cat /etc/hosts
172.16.35.10 k8s-m1
IP address for eth0: 10.0.2.15
IP address for eth1: 172.16.35.10
IP address for docker0: 172.17.0.1
IP address for tunl0: 10.244.0.1
172.16.35.11 k8s-n1
172.16.35.12 k8s-n2
vagrant@k8s-m1:~$ ping k8s-n1
PING k8s-n1 (172.16.35.11) 56(84) bytes of data.
64 bytes from k8s-n1 (172.16.35.11): icmp_seq=1 ttl=64 time=0.648 ms
$ ~/16kube-ansible$ ansible -i inventory/hosts.ini all -m ping
172.16.35.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.35.11 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.35.12 | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ./hack/clear-vms
# 參考文章裡的設定,修改下面2個檔案
inventory/hosts.ini
group_vars/all.yml
[etcds] # 網路
k8s-m[1:1] ansible_user=ubuntu
[masters]
k8s-m[1:1] ansible_user=ubuntu
[nodes] # Worker Node
k8s-n1 ansible_user=ubuntu
k8s-n2 ansible_user=ubuntu
[kube-cluster:children]
masters # 上面定義的
nodes # 上面定義的
$ ansible -i inventory/hosts.ini all -m ping # 確認網路狀態
$ ansible-playbook -i inventory/hosts.ini cluster.yml # 部署 Kubernetes 叢集
如果下
$ kubectl version
或
$ kubectl get nodes
這到下面這個訊息
The connection to the server localhost:8080 was refused - did you specify the right host or port?
試試看
$ export KUBECONFIG=/etc/kubernetes/admin.conf
進Master Node (k8s-m1)
# 查看元件狀態
$ kubectl get cs
# 查看節點狀態
$ kubectl get no
# 使用Master Node命令Worker Node建Pod
# 測試是否可以建立 Pod
$ kubectl run nginx --image nginx --restart=Never --port 80
$ kubectl expose pod nginx --port 80 --type NodePort
$ kubectl get po,svc
$ curl 172.22.132.8:xxxxx # 測試服務
$ ansible-playbook -i inventory/hosts.ini addons.yml # 透過addons.yml來部署 Kubernetes extra addons
# 透過 kubectl 來檢查服務,如 kubernetes-dashboard
$ kubectl get po,svc -n kube-system -l k8s-app=kubernetes-dashboard
# 清cluster
$ ansible-playbook -i inventory/hosts.ini reset-cluster.yml
===
本來想解析kube-ansible/roles
因為這個專案的role我只看得懂3成
所以就不寫啦
明天開始會介紹k8s的各項主題(混混天數)
最後幾天會再重新介紹ansible的各種基礎,
相信到時回來看就可以看懂5成了吧?