本文介绍使用Fedora CoreOS在OpenStack Magnum上创建Kubernetes集群的具体步骤。
前言 OpenStack Magnum是由OpenStack Containers Team开发的OpenStack API服务,用于简化容器编排引擎(COE)在OpenStack Cloud平台中的部署,例如Kubernetes、Docker Swarm和Apache Mesos。在支持的三个引擎中,Kubernetes是最受欢迎的一个,所以本文完全关注Kubernetes。OpenStack Heat服务用作集群创建和管理操作的编排。 Magnum与其他OpenStack服务有很好的集成,例如用于卷管理的Cinder、用于其他服务之间的负载平衡的Octavia。这确保了与核心Kubernetes的无缝集成。本文中将用于构建Kubernetes实例的主要映像是Fedora CoreOS。 本文假设您已经有一个正在运行的OpenStack云平台,并配置了Cinder。我们的实验室环境基于在CentOS 8上运行的OpenStack Victoria。 您还应该在Workstation中配置OpenStack客户端,并能够使用OpenStack API端点进行访问。参考在Linux系统上安装和配置OpenStack Client(客户端)的方法。 Cinder块存储服务必须已配置后端以用于Docker卷和实例数据存储。如果在Cinder上使用LVM,它应该有Docker卷使用的可用空间: $ sudo vgs
第1步:安装和配置Magnum容器服务 安装OpenStack Magnum软件包并使用以下指南进行配置: 在CentOS/Ubuntu上安装和配置OpenStack Magnum容器服务。 之后确认以下设置: $ sudo vim /etc/magnum/magnum.conf [DEFAULT] state_path = /var/lib/magnum log_dir = /var/log/magnum [certificates] cert_manager_type = barbican [trust] cluster_user_trust = true 如果您没有Barbican服务设置,请配置。 重启Magnum服务: sudo systemctl restart openstack-magnum-api openstack-magnum-conductor 确认Controller节点上的Magnum服务状态: $ openstack coe service list
第2步:将Fedora CoreOS映像上传到Glance Fedora CoreOS将用作通过Magnum配置的节点的底层操作系统。 访问Fedora CoreOS下载页面并选择一个发布流和匹配的OpenStack .xz 映像,地址在https://getfedora.org/en/coreos/。本文下载的是fedora-coreos-34.20210427.3.0-openstack.x86_64.qcow2.xz。 提取下载的image存档: unxz fedora-coreos-34.20210427.3.0-openstack.x86_64.qcow2.xz 上传image一目了然: openstack image create Fedora-CoreOS-34 \ --public \ --disk-format=qcow2 \ --container-format=bare \ --property os_distro='fedora-coreos' \ --file=fedora-coreos-34.20210427.3.0-openstack.x86_64.qcow2 上传的image必须具有定义为适合集群驱动程序的属性“os_distro”。对于Fedora CoreOS,该值应该是fedora-coreos。 上传后确认image可用性: $ openstack image list --column Name --column Status
第3步:创建Kubernetes集群模板 集群模板向magnum描述了如何构建集群。我们的ClusterTemplate有Fedora CoreOS镜像的规范,所以使用这个ClusterTemplate的集群将基于Fedora CoreOS。但在定义模板之前,从OpenStack云中提取所有必需的变量/值。 列出SSH密钥对并记下将要使用的密钥对: $ openstack keypair list
列出创建的Neutron网络以识别私有和公共网络名称: $ openstack network list --column Name --column Subnets
列出可用的计算风格。如果没有,您可能需要为主节点和工作节点创建: $ openstack flavor list --column Name --column RAM --column Disk --column VPCUs
我将运行以下命令来创建Kubernetes集群模板: openstack coe cluster template create k8s-cluster-template \ --image Fedora-CoreOS-34 \ --keypair admin \ --external-network public \ --fixed-network private \ --fixed-subnet private_subnet \ --dns-nameserver 8.8.8.8 \ --flavor m1.medium \ --master-flavor m1.large \ --volume-driver cinder \ --docker-volume-size 10 \ --network-driver calico \ --docker-storage-driver overlay2 \ --coe kubernetes 列出模板以确认它确实已创建: $ openstack coe cluster template list
可以从Horizon Dashboard执行相同的ClusterTemplate创建过程,在Project > Container Infra > Cluster Templates > Create Cluster Template下:
第4步:在OpenStack Magnum上创建Kubernetes集群 如果您将“cloud_provider_enabled”标签设置为true,则必须在magnum.conf中将cluster_user_trust设置为True: $ sudo vim /etc/magnum/magnum.conf cluster_user_trust = true 如果您进行了更改,请重新启动magnum Api和Conductor服务: for i in api conductor; do sudo systemctl restart openstack-magnum-$i; done 使用ClusterTemplate名称作为创建集群的模板。该集群将产生一个主kubernetes节点和两个从属节点: openstack coe cluster create k8s-cluster-01 \ --cluster-template k8s-cluster-template \ --master-count 1 \ --node-count 2 列出kubernetes集群以检查创建状态: $ openstack coe cluster list --column name --column status --column health_status
集群设置完成后,状态和health_status将更改: $ openstack coe cluster list --column name --column status --column health_status
您应该看到Cinder卷已创建并附加到实例: $ openstack volume list --column Name --column Status --column Size
要列出创建的虚拟机,请使用以下命令,这些命令有一个过滤器来限制显示的列数: $ openstack server list --column Name --column Image --column Status
在Web UI中看到的服务器列表:
列出节点组: $ openstack coe nodegroup list k8s-cluster-01 要检查所有群集堆栈的列表: $ openstack stack list 对于已完成的设置,“Stack Status”应显示为CREATE_COMPLETE: $ openstack stack list --column 'Stack Name' --column 'Stack Status'
要检查单个集群的堆栈: $ openstack stack show <stack-name or stack_id> 详细监控集群状态(例如创建、更新): K8S_CLUSTER_HEAT_NAME=$(openstack stack list | awk "/\sk8s-cluster-/{print \$4}") echo ${K8S_CLUSTER_HEAT_NAME} openstack stack resource list ${K8S_CLUSTER_HEAT_NAME} 现在来访问Kubernetes集群节点。 Fedora CoreOS的登录用户是core。 列出OpenStack实例并显示网络信息: $ openstack server list --column Name --column Networks
使用核心用户名和公共IP登录到VM。您应该使用用于部署Kubernetes集群的SSH密钥的私钥: $ ssh core@masterip $ ssh core@workerip SSH访问主节点示例: $ ssh core@150.70.145.200 Enter passphrase for key '/Users/jmutai/.ssh/id_rsa': Fedora CoreOS 34.20210427.3.0 Tracker: https://github.com/coreos/fedora-coreos-tracker Discuss: https://discussion.fedoraproject.org/c/server/coreos/ [core@k8s-cluster-01-ohx564ufdsma-master-0 ~]$ 要获取操作系统版本信息,请运行: $ cat /etc/os-release NAME=Fedora VERSION="34.20210427.3.0 (CoreOS)" ID=fedora VERSION_ID=34 VERSION_CODENAME="" PLATFORM_ID="platform:f34" PRETTY_NAME="Fedora CoreOS 34.20210427.3.0" ANSI_COLOR="0;38;2;60;110;180" LOGO=fedora-logo-icon CPE_NAME="cpe:/o:fedoraproject:fedora:34" HOME_URL="https://getfedora.org/coreos/" DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora-coreos/" SUPPORT_URL="https://github.com/coreos/fedora-coreos-tracker/" BUG_REPORT_URL="https://github.com/coreos/fedora-coreos-tracker/" REDHAT_BUGZILLA_PRODUCT="Fedora" REDHAT_BUGZILLA_PRODUCT_VERSION=34 REDHAT_SUPPORT_PRODUCT="Fedora" REDHAT_SUPPORT_PRODUCT_VERSION=34 PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy" VARIANT="CoreOS" VARIANT_ID=coreos OSTREE_VERSION='34.20210427.3.0' DEFAULT_HOSTNAME=localhost 列出节点中正在运行的容器: $ sudo docker ps 系统容器etcd、kubernetes和heat-agent将与podman一起安装: $ sudo podman ps
Worker节点上的Docker容器:
第5步:使用CLI检索集群的配置 如果集群创建成功,则应该能够提取Kubernetes配置文件。Kubernetes配置文件包含访问集群所需的信息,即URL、访问凭据和证书。 Magnum允许您检索特定集群的配置。 创建一个目录来存储您的配置: mkdir kubeconfigs 列出集群: $ openstack coe cluster list --column name --column status --column health_status
然后拉取集群配置: export cluster=k8s-cluster-01 openstack coe cluster config $cluster --dir ./kubeconfigs 创建名为config的文件: $ ls ./kubeconfigs config 以下再安装kubectl工具,参考安装及使用kubectl、kubectx和kubens轻松管理多个Kubernetes集群。 安装完成后,导出包含下载的Kubernetes配置路径的变量KUBECONFIG: export KUBECONFIG=<path_to_pulled_kubeconfig> 在我的设置中,这将是: $ export KUBECONFIG=./kubeconfigs/config 验证配置是否有效: $ kubectl cluster-info Kubernetes control plane is running at https://150.70.145.200:6443 CoreDNS is running at https://150.70.145.200:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get nodes
要进一步调试和诊断集群问题,请使用“kubectl cluster-info dump”: $ kubectl create ns sandbox namespace/sandbox created $ kubectl run --image=nginx mynginx -n sandbox pod/mynginx created $ kubectl get pods -n sandbox
$ kubectl delete pod mynginx -n sandbox
相关主题 |