CSE:適用於 vCloud 中的 Kubernetes

CSE:適用於 vCloud 中的 Kubernetes
大家好!

碰巧的是,我們的小團隊(更不用說最近,當然也不是突然)已經成長為將一些(以及將來所有)產品轉移到 Kubernetes。

造成這種情況的原因有很多,但我們的故事與霍利瓦爾無關。

關於基礎設施基礎,我們別無選擇。 vCloud 總監和 vCloud 總監。 我們選擇了較新的並決定開始。

再次瀏覽“艱難之路”,我很快得出結論,昨天需要一個至少可以自動化基本流程(例如部署和調整規模)的工具。 對 Google 的深入研究揭示了 VMware 容器服務擴充功能 (CSE) 等產品,這是一種開源產品,可讓您為 vCloud 中的 k8s 叢集自動建立和調整大小。

免責聲明:CSE 有其局限性,但就我們的目的而言,它是完美的。 此外,該解決方案必須得到雲端提供者的支持,但由於伺服器部分也是開源的,請詢問您最近的經理以獲取它:)

要開始使用它,您需要 vCloud 組織中的管理員帳戶以及先前為叢集建立的路由網路(在部署過程中,您需要從此網路存取 Internet,不要忘記設定防火牆/NAT)。 尋址並不重要。 在此範例中,我們採用 10.0.240.0/24

CSE:適用於 vCloud 中的 Kubernetes

由於建立後,需要以某種方式管理集群,因此建議使用可路由到所建立網路的 VPN。 我們使用在組織的 Edge Gateway 上設定的標準 SSL VPN。

接下來,您需要安裝將管理 k8s 叢集的 CSE 用戶端。 就我而言,這是一台可以工作的筆記型電腦和幾個隱藏得很好的容器,可以驅動自動化。

客戶端需要安裝Python 3.7.3及更高版本並安裝模組 vcd-cli,所以讓我們安裝兩者。

pip3 install vcd-cli

pip3 install container-service-extension

安裝完成後,我們檢查CSE版本,得到以下資訊:

# vcd cse version
Error: No such command "cse".

出乎意料,但可以修復。 事實證明,CSE 需要作為模組附加到 vcd-cli。
為此,您必須先登入 vcd-cli 到我們的組織:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

之後,vcd-cli將建立一個設定文件 〜/.vcd-cli/profiles.yaml
最後您需要添加以下內容:

extensions:
  - container_service_extension.client.cse

然後我們再次檢查:

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

客戶端安裝階段已完成。 讓我們嘗試部署第一個叢集。
CSE有幾組使用參數,都可以查看 在這裡。

首先,讓我們建立用於無密碼存取未來叢集的金鑰。 這一點很重要,因為預設情況下,節點的密碼登入將被停用,如果不設定金鑰,則可以透過虛擬機器的控制台進行大量工作,這很不方便。

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

讓我們嘗試開始建立叢集:

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

如果我們收到錯誤 錯誤:會話已過期或使用者未登入。 請重新登入。 — 如上所述再次登入 vcd-cli 到 vCloud,然後重試。

這回一切正常了,建立叢集的任務已經開始了。

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

完成任務大約需要 20 分鐘;在此期間,我們來看看基本的啟動參數。

—network — 我們先前建立的網路。
—ssh-key — 我們建立的金鑰,它將被寫入叢集節點
—nodes n — 叢集中工作節點的數量。 永遠只有一個主人,這是 CSE 的限制
—enable-nfs — 在持久性磁碟區下為 NFS 共用建立一個附加節點。 這有點像是踏板選項;我們稍後會再調整它的功能。

同時,在vCloud中可以直觀地監控叢集的創建情況
CSE:適用於 vCloud 中的 Kubernetes

一旦創建集群的任務完成,就可以使用了。

我們用命令檢查部署的正確性 vcd cse 集群資訊 MyCluster

CSE:適用於 vCloud 中的 Kubernetes

接下來我們需要取得要使用的叢集配置 Kubectl

# vcd cse cluster config MyCluster > ./.kube/config

您可以使用它檢查集群的狀態:

CSE:適用於 vCloud 中的 Kubernetes

此時,如果不是針對具有持久卷的情況,則可以認為群集有條件地工作。 由於我們位於 vCloud 中,因此我們將無法使用 vSphere Provider。 選項 --啟用 nfs 旨在消除這種麻煩,但並沒有完全解決。 需要手動調整。

首先,我們的節點需要在 vCloud 中建立一個單獨的獨立磁碟。 這樣就保證了我們的資料如果被刪除也不會隨著叢集一起消失。 另外,將磁碟連接到 NFS

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

之後,我們透過 ssh(你真的創建了金鑰?)到我們的 NFS 節點並最終連接磁碟:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

建立一個資料目錄並在那裡掛載一個新分割區:

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

讓我們建立五個測試分區並為叢集共用它們:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
#Далее - экспортируем разделы
>exportfs -r

經過所有這些魔法之後,我們可以在叢集中創建 PV 和 PVC,如下所示:
光伏:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

PVC:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi
EOF

這是一個集群創建故事的結束,也是其生命週期故事的開始。 作為獎勵,有兩個更有用的 CSE 命令可以讓您有時節省資源或不節省資源:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

感謝大家抽出寶貴的時間,如果有任何疑問,請在評論中提問。

來源: www.habr.com

添加評論