Deploy OpenStack The Series Part II: ติดตั้ง Kubernetes โดยใช้ Kubespray
ซีรีย์การติดตั้ง OpenStack โดยใช้ Armada ที่จะอธิบายแบบภาษาบ้าน ๆ ตามความเข้าใจของผมเอง จุดประสงค์คือกันลืม ในอนาคตจะได้เข้ามาอ่านใหม่ โดยจะแบ่งออกเป็น 3 ส่วนหลัก ๆ คือ 1.ติดตั้ง CoreOS 2.ติดตั้ง Kubernetes และ 3.ติดตั้ง OpenStack
บทนำ
เนื้อหาของพาร์ทนี้จะเป็นการติดตั้ง Kubernetes โดยใช้เครื่องมือที่ชื่อว่า Kubespray ติดตั้งลงบน CoreOS ที่เราทำกันไปในพาร์ทที่ 1
Kubernetes
Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications.
ข้อความด้านบนคัดลอกมากจาก https://kubernetes.io/ สามารถเข้าอ่านเพิ่มเติมกันได้
Kubespray คืออะไร
Kubespray คือเครื่องมือสำหรับช่วยติดตั้ง k8s ครัสเตอร์ที่ทางผู้พัฒนาได้บอกว่าเขาทำได้ดังนี้
- Can be deployed on AWS, GCE, Azure, OpenStack, vSphere, Packet (bare metal), Oracle Cloud Infrastructure (Experimental), or Baremetal
- Highly available cluster
- Composable (Choice of the network plugin for instance)
- Supports most popular Linux distributions
- Continuous integration tests
นอกเหนือจากนี้ยังมีความสามารถอีกเยอะเลยครับ รวมถึงเราสามารถเลือกปลั๊กอินได้หลายอย่างมาก ๆ สามารถ อ่านเพิ่มเติม ได้จากลิงค์เลยครับ
Let Start!!
เพื่อไม่ให้เป็นการเสียเวลาเรามาเริ่มติดตั้งกันเลยดีกว่า เย้~
1. Clone Project
เริ่มต้นจากโคลนตัว Kubespray มากจาก Git ก่อนเลย
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
2. สร้าง Virtualenv และติดตั้งแพ็กเกจที่จำเป็นสำหรับรัน Ansible
virtualenv ~/env/kubespray
source ~/env/kubespray/bin/activate
pip install -r requirements.txt
3. แก้ไข ansible inventory
# Copy ``inventory/sample`` as ``inventory/mycluster``
cp -rfp inventory/sample inventory/mycluster# Update Ansible inventory file with inventory builder
declare -a IPS=(192.168.0.101 192.168.0.102 192.168.0.103)
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
ในไฟล์ inventory/mycluster/hosts.yml จะมีหน้าตาประมาณนี้ สามารถแก้ไขได้ตามต้องการเลยครับ
# inventory/mycluster/hosts.yml
all:
hosts:
node1:
ansible_host: 192.168.0.101
ip: 192.168.0.101
access_ip: 192.168.0.101
node2:
ansible_host: 192.168.0.102
ip: 192.168.0.102
access_ip: 192.168.0.102
node3:
ansible_host: 192.168.0.103
ip: 192.168.0.103
access_ip: 192.168.0.103
children:
kube-master:
hosts:
node1:
node2:
kube-node:
hosts:
node1:
node2:
node3:
etcd:
hosts:
node1:
node2:
node3:
k8s-cluster:
children:
kube-master:
kube-node:
calico-rr:
hosts: {}
4. แก้ไข data variable ต่าง ๆ
# Review and change parameters under ``inventory/mycluster/group_vars``
cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
ในส่วนของ CoreOS จำเป็นต้องแก้ตามนี้ครับ
# inventory/mycluster/group_vars/all/all.yml
bin_dir: /opt/bin
upstream_dns_servers:
- 8.8.8.8
- 8.8.4.4
และ
# inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
resolvconf_mode: host_resolvconf
kubeconfig_localhost: true
5. พิมพ์คำสั่งติดตั้งแล้วรอลุ้น
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root --user test cluster.yml
ระหว่างนี้ก็นั่งภาวนาอ้อนวอนสิ่งศักดิ์สิทธิ์ไม่ให้เจอปัญหาอะไรระหว่างทางหรือไม่ก็ไปหาอะไรกินรองท้องเลยครับ เพราะถ้าท่านทำตามวิธีของผมทั้งหมดก็ไม่น่าเจอเออเร่ออะไร เพราะผมแก้หมดแล้ว 5555 พังไปหลายรอบเลย
6. ทดสอบใช้งาน
เมื่อติดตั้งเสร็จแรียบร้อยแล้วเราจะได้ไฟล์คอนฟิกอยู่ที่
inventory/mycluster/artifacts/admin.conf
คัดลอกไฟล์คอนฟิกเพื่อทดสอบ
cp inventory/mycluster/artifacts/admin.conf ~/.kube/config
kubectl get nodes
7. ติดตั้ง Helm
ขึ้นแรกก็ลง Helm ก่อนเลย
export HELM_INSTALL_DIR=/opt/bin
curl -L https://git.io/get_helm.sh | bash
จากนั้นก็สร้าง account tiller ขึ้นมา
helm initkubectl create serviceaccount --namespace kube-system tillerkubectl create clusterrolebinding tiller-cluster-rule \
--clusterrole=cluster-admin --serviceaccount=kube-system:tillerkubectl patch deploy --namespace kube-system tiller-deploy \
-p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'
จริง ๆ แล้วราสามารถเปิด helm ได้ตั้งแต่ตอนคอนฟิกใน inventory เลย แต่ผมไม่ได้เปิดไว้ ถ้าใครต้องการเปิดก็ตามนี้ครับ
# inventory/mycluster/group_vars/k8s-cluster/addons.yml
helm_enabled: true
เท่านี้ก็เสร็จเรียบร้อยยยย
อ่านเพิ่มเติม
[1] Kubernetes
https://kubernetes.io/
[2] Kubespray
https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting-started.md
[3] Helm
https://helm.sh/docs/using_helm/