GIới thiệu về Virtual Kubelet
Giới thiệu
Virutal kubelet (VK) là triển khai mã nguồn mở của Kubernetes Kubelet làm 1 Kubelet nhằm mục đích kết nối Kubernetes đến các APIs khác.
Mô hình:
Vì Virtual Kubelet không thực sự là 1 node kubelet thế nên các containers/pod sẽ được tạo thực tế ở trên các cloud providers khác cung cấp dịch vụ.
Các providers đang hỗ trợ:
Admiralty Multi-Cluster Scheduler
Alibaba Cloud Elastic Container Instance (ECI)
AWS Fargate
Azure Batch
Azure Container Instances (ACI)
Elotl Kip
Kubernetes Container Runtime Interface (CRI)
Huawei Cloud Container Instance (CCI)
HashiCorp Nomad
OpenStack Zun
Tencent Games Tensile Kube
Ở đây chúng ta sẽ sử dụng openstack zun
Cài đặt
Để cài đăt, ta cần cài đặt Go và đặt biến môi trường GOPATH (tham khảo tại): https://www.linode.com/docs/development/go/install-go-on-ubuntu/
Tải VK về từ github: https://github.com/virtual-kubelet/openstack-zun.git
Truy cập đến thư mục: ~/openstack-zun/cmd/virtual-kubelet#
Sau đó build: go build main.go
đổi tên main
-> virtual-kubelet
copy vào thư mục /usr/bin
Khởi chạy
Để khởi chạy ta cần xác thực qua keystone, ta cần những biến môi trường như sau:
export OS_DOMAIN_ID=default
export OS_REGION_NAME=RegionOne
export OS_PROJECT_NAME=demo
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_URL=http://10.0.2.15/identity/v3
export OS_USERNAME=demo
export OS_PASSWORD=password
P/s: đặt biến môi trường theo cài đặt của mình
Sau đó chạy lệnh virtual-kubelet
Kết quả:
root@k8s-master:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 122m v1.13.3
k8s-worker Ready <none> 105m v1.13.3
virtual-kubelet Ready agent 94m v1.14.3
Triển khai pods trong VK:
Vì OpenStack virtual node được cấp 1 taint, thế nên cần toleration để triển khai pod đó:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
tolerations:
- key: "virtual-kubelet.io/provider"
operator: "Equal"
value: "openstack"
effect: "NoSchedule"
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
root@k8s-master:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-virtual-77cf5845f5-8h9tp 1/1 Running 0 14m 10.1.1.54 k8s-worker <none> <none>
nginx-deployment-worker-57d9684bf8-z7skz 1/1 Running 1 51m 10.1.1.191 k8s-worker <none> <none>
Check trên openstack:
openstack capsule list
+--------------------------------------+---------------------------------------------------+---------+------------+
| uuid | name | status | addresses |
+--------------------------------------+---------------------------------------------------+---------+------------+
| 4fe2d632-cb11-4596-b9a9-feebab10191f | default-nginx-deployment-virtual-77cf5845f5-npxcv | Running | 10.1.0.198 |
| 3ff4a995-67c0-416d-bced-78378c6f616e | kube-system-kube-proxy-4jt8p | Error | |
+--------------------------------------+---------------------------------------------------+---------+------------+
Chú ý, vì VK không sử dụng mạng của k8s tạo ra mà dụng mạng của neutron nên kube-proxy lỗi là điều bình thường.
Đối với Openstack Zun, có 2 khái niệm cần để ý đó là containers và capsule.
Capsule tương ứng với pod và containers tương ứng với containers