您好!
碰巧的是,我们的小团队(更不用说最近,当然也不是突然)已经成长为将一些(以及将来所有)产品转移到 Kubernetes。
造成这种情况的原因有很多,但我们的故事与霍利瓦尔无关。
关于基础设施基础,我们别无选择。 vCloud 总监和 vCloud 总监。 我们选择了较新的并决定开始。
再次浏览“艰难之路”,我很快得出结论,昨天需要一个至少可以自动化基本流程(例如部署和调整规模)的工具。 对 Google 的深入研究揭示了 VMware 容器服务扩展 (CSE) 等产品,这是一种开源产品,可让您为 vCloud 中的 k8s 集群自动创建和调整大小。
免责声明:CSE 有其局限性,但就我们的目的而言,它是完美的。 此外,该解决方案必须得到云提供商的支持,但由于服务器部分也是开源的,请询问您最近的经理以获取它:)
要开始使用它,您需要 vCloud 组织中的管理员帐户以及之前为集群创建的路由网络(在部署过程中,您需要从此网络访问 Internet,不要忘记配置防火墙/NAT)。 寻址并不重要。 在此示例中,我们采用 10.0.240.0/24
由于创建后,需要以某种方式管理集群,因此建议使用可路由到所创建网络的 VPN。 我们使用在组织的 Edge Gateway 上配置的标准 SSL VPN。
接下来,您需要安装将管理 k8s 集群的 CSE 客户端。 就我而言,这是一台可以工作的笔记本电脑和几个隐藏得很好的容器,可以驱动自动化。
客户端需要安装Python 3.7.3及更高版本并安装模块
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中可以直观地监控集群的创建情况
一旦创建集群的任务完成,就可以使用了。
我们用命令检查一下部署的正确性 vcd cse 集群信息 MyCluster
接下来我们需要获取要使用的集群配置 Kubectl
# vcd cse cluster config MyCluster > ./.kube/config
您可以使用它检查集群的状态:
此时,如果不是针对具有持久卷的情况,则可以认为集群有条件地工作。 由于我们位于 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,如下所示:
PV:
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
感谢大家抽出宝贵的时间,如果有任何疑问,请在评论中提问。
来源: habr.com