大家好!碰巧的是,我们的小型开发团队已经成长为将某些(以及将来的所有)产品转移到Kubernetes,更不用说最近了,当然不是突然之间。
造成这种情况的原因很多,但我们的故事与霍利瓦尔无关。
从基础设施的角度来看,我们别无选择。 vCloud Director和vCloud Director。 我们选择了较新的版本,并决定开始。
通过“艰难的道路”,我再次得出结论,昨天需要至少一种用于自动化至少基本流程(例如部署和规模调整)的工具。 谷歌的沉浸式展示了VMware Container Service Extension(CSE)等产品,这是一种开放源代码产品,可让您自动为vCloud中的k8s集群创建和调整k8s集群。
免责声明:CSE有其局限性,但出于我们的目的,它是完美的。 另外,该解决方案应得到云提供商的支持,但是由于服务器部分也是开源的,请向最近的经理咨询:)
CSE客户端安装
- 首先,您将需要vCloud组织中的管理员帐户和预先为集群创建的路由网络。 重要提示:在部署过程中,您需要从该网络访问Internet,请不要忘记配置防火墙/ NAT。
寻址无关紧要。 在此示例中,采用10.0.240.0/24:

由于创建群集后,有必要进行某种方式的管理,因此建议使用VPN,并将其路由到创建的网络。 我们使用在组织的Edge网关上配置的标准SSL-VPN。
- 接下来,您需要将CSE客户端安装到将要管理k8s群集的位置。 就我而言,这是一台工作中的笔记本电脑和几个操纵自动化
的隐藏容器。
客户端需要已安装的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-集群的Worker节点数。 总会有一个向导,这是CSE的限制。
- --enable-nfs-在持久卷下为NFS球创建一个附加节点。 有点踏板选择,稍后我们将返回以调整它的功能。
- 同时,在vCloud中,您可以直观地观察集群的创建。

- 创建集群的任务完成后,就可以开始了。
- 使用vcd cse cluster info MyCluster命令验证部署。

- 接下来,我们需要获取使用kubectl的集群配置。
# vcd cse cluster config MyCluster > ./.kube/config
- 您可以使用它检查集群的状态:

没那么简单
在这一点上,如果没有持久卷的故事,则可以将集群视为有条件运行。 由于我们位于vCloud中,因此无法使用vSphere Provider。 选项
--enable-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
- 完成所有这些魔术之后,您可以像这样在我们的集群中创建PV和PVC:
光伏
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: nfs-vol1 spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs:
聚氯乙烯
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 10Gi EOF
在此,创建一个集群的故事结束,并且其生命周期的故事开始。 另外,还有两个更有用的CSE命令,可让您有时节省资源:
谢谢大家的宝贵时间,如果您有任何疑问,请在评论中提问。