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,如下所示:
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

添加评论