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:

VK

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

Show Comments