教程get | K8S部署OpenStack容器云(下)

简介: 如何借助OpenStack Kolla-K8S项目,通过K8S对OpenStack进行容器化部署?并最终部署一套All-In-One类型的OpenStack容器云?让我们继续部署: 部署kolla-kubernetes ■  覆盖默认的RBAC设置 通过kubectl replace命令进行默.

如何借助OpenStack Kolla-K8S项目,通过K8S对OpenStack进行容器化部署?并最终部署一套All-In-One类型的OpenStack容器云?让我们继续部署:   

部署kolla-kubernetes

■  覆盖默认的RBAC设置

通过kubectl replace命令进行默认RBAC设置的覆盖,如下:

kubectl replace -f <(cat <<EOF

apiVersion: rbac.authorization.k8s.io/v1alpha1

kind: ClusterRoleBinding

metadata:

  name: cluster-admin

roleRef:

  apiGroup:rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

– kind: Group

  name: system:masters

– kind: Group

  name: system:authenticated

– kind: Group

  name: system:unauthenticated

EOF

)

■  安装部署Helm

Helm是Kubernetes中的包管理器,类似yum包管理工具,yum用来安装RPM包,而Helm用来安装charts,这里的charts便类似RPM软件包。Helm分为客户端和服务器端,Helm的服务器端称为tiller,服务器端在Kubernetes中以Docker容器形式运行,为了便于Helm安装,可以实先将Tiller的容器镜像下载到本地,可使用如下命令下载:

docker pull warrior/kubernetes-helm:2.4.1

docker tag warrior/kubernetes-helm:2.4.1 gcr.io/kubernetes-helm/tiller:v2.4.1

安装Helm最简单的方式如下:

sudo curl -L https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get

 > get_helm.sh

sudo chmod 700 get_helm.sh

sudo ./get_helm.sh

sudo helm init

Helm安装完成后,可以看到kube-system命名空间中新增了一个running状态的POD,名称为tiller-deploy-xxx;

Helm安装成功后,通过helm version即可看到客户端和服务器端的信息;

■  安装kolla-ansible和kolla-kubernetes

Clone社区Kolla-ansible源代码,如下:

git clone http://github.com/openstack/kolla-ansible

git clone http://github.com/openstack/kolla-kubernetes

安装kolla-ansible和kolla-kubernets,如下:

sudo pip install -U kolla-ansible/ kolla-kubernetes/

复制默认的kolla配置文件到/etc目录,如下:

sudo cp -aR /usr/share/kolla-ansible/etc_examples/kolla /etc

复制 kolla-kubernetes 配置文件至/etc目录,如下:

sudo cp -aR kolla-kubernetes/etc/kolla-kubernetes /etc

为Openstack集群各个项目和用户生成密码文件,如下:

sudo kolla-kubernetes-genpwd

在kubernets中创建一个独立的密码空间kolla,如下:

kubectl create namespace kolla

将AIO节点标记为控制节点和计算节点,如下:

kubectl label node $(hostname) kolla_compute=true

kubectl label node $(hostname) kolla_controller=true

修改/etc/kolla/globals.yml配置文件,其中:network_interface和neutron_external_interface两个变量需要用户指定,network_interface是管理接口(如eth0),默认也是Openstack各个服务项目的API接口,neutron_external_interface是Neutron项目用于外网桥接的物理接口(如eth1),该接口上不要手工配置IP地址。

将需要启动的服务项目添加到/etc/kolla/globals.yml的末尾,如下:

cat <<EOF > add-to-globals.yml

kolla_install_type: “source”

tempest_image_alt_id: “{{ tempest_image_id }}”

tempest_flavor_ref_alt_id: “{{ tempest_flavor_ref_id }}”

neutron_plugin_agent: “openvswitch”

api_interface_address: 0.0.0.0

tunnel_interface_address: 0.0.0.0

orchestration_engine: KUBERNETES

memcached_servers: “memcached”

keystone_admin_url: “http://keystone-admin:35357/v3”

keystone_internal_url: “http://keystone-internal:5000/v3”

keystone_public_url: “http://keystone-public:5000/v3”

glance_registry_host: “glance-registry”

neutron_host: “neutron”

keystone_database_address: “mariadb”

glance_database_address: “mariadb”

nova_database_address: “mariadb”

nova_api_database_address: “mariadb”

neutron_database_address: “mariadb”

cinder_database_address: “mariadb”

ironic_database_address: “mariadb”

placement_database_address: “mariadb”

rabbitmq_servers: “rabbitmq”

openstack_logging_debug: “True”

enable_haproxy: “no”

enable_heat: “no”

enable_cinder: “yes”

enable_cinder_backend_lvm: “yes”

enable_cinder_backend_iscsi: “yes”

enable_cinder_backend_rbd: “no”

enable_ceph: “no”

enable_elasticsearch: “no”

enable_kibana: “no”

glance_backend_ceph: “no”

cinder_backend_ceph: “no”

nova_backend_ceph: “no”

EOF

cat ./add-to-globals.yml | sudo tee -a /etc/kolla/globals.yml

如果是在虚拟机上进行部署,则需要使用qemu虚拟化引擎,如下:

sudo mkdir /etc/kolla/config

sudo tee /etc/kolla/config/nova.conf<<EOF

[libvirt]

virt_type=qemu

cpu_mode=none

EOF

生成默认的Openstack各个项目配置文件,如下:

sudo kolla-ansible genconfig

为Openstack各个项目创建Kubernetes秘钥并将其注册到Kubernetes集群中,如下:

kolla-kubernetes/tools/secret-generator.py create

创建并注册kolla的config map,如下:

kollakube res create configmap mariadb keystone horizon rabbitmq memcached nova-api nova-conductor nova-scheduler glance-api-haproxy glance-registry-haproxy glance-api glance-registry neutron-server neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-openvswitch-agent openvswitch-db-server  openvswitch-vswitchd nova-libvirt nova-compute nova-consoleauth  nova-novncproxy nova-novncproxy-haproxy neutron-server-haproxy nova-api-haproxy cinder-api cinder-api-haproxy cinder-backup inder-scheduler cinder-volume iscsid tgtd keepalived placement-api placement-api-haproxy

启用resolv.conf解决方法,如下:

kolla-kubernetes/tools/setup-resolv-conf.sh kolla

编译Helm的microcharts、service charts和 metacharts,如下:

kolla-kubernetes/tools/helm_build_all.sh ./

编译过程会花费一定时间,编译完成会在当前目录上产生很多.tgz的文件,其数目至少要大于150个。

创建一个本地cloud.yaml文件,用于安装部署Helm的charts,如下:

global:

   kolla:

     all:

       docker_registry:192.168.128.13:4000 //本地registry仓库地址

       image_tag:”4.0.0″

       kube_logger: false

       external_vip:”192.168.128.13″

       base_distro:”centos”

       install_type: “source”

       tunnel_interface:”ens34″   //管理接口

      resolve_conf_net_host_workaround: true

     keystone:

       all:

         admin_port_external:”true”

         dns_name:”192.168.128.13″

       public:

         all:

           port_external:”true”

     rabbitmq:

       all:

         cookie: 67

     glance:

       api:

         all:

           port_external:”true”

     cinder:

       api:

         all:

           port_external:”true”

       volume_lvm:

         all:

           element_name:cinder-volume

         daemonset:

           lvm_backends:

           – ‘192.168.128.13’:’cinder-volumes’ //cinder后端VG名称

     ironic:

       conductor:

         daemonset:

           selector_key:”kolla_conductor”

     nova:

       placement_api:

         all:

           port_external: true

       novncproxy:

         all:

           port: 6080

           port_external: true

     openvwswitch:

       all:

         add_port: true

         ext_bridge_name:br-ex

         ext_interface_name:ens41 //Neutron外网桥接网口

         setup_bridge: true

     horizon:

       all:

         port_external: true

cloud.yaml文件需要根据用户各自的环境进行修改,上述文件中的192.168.128.13是笔者管理网口ens34上的IP地址,在使用过程中需要进行相应的修改。 

■  使用Helm在Kubernetes上部署Openstack

首先部署MariaDB,并等待其POD进入running状态,如下:

helm install –debug kolla-kubernetes/helm/service/mariadb –namespace kolla –name mariadb –values ./cloud.yaml

待数据库稳定后,部署其他的Openstack服务,如下:

helm install –debug kolla-kubernetes/helm/service/rabbitmq –namespace kolla –name rabbitmq –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/memcached –namespace kolla –name memcached –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/keystone –namespace kolla –name keystone –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/glance –namespace kolla –name glance –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/cinder-control –namespace kolla –name cinder-control –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/horizon –namespace kolla –name horizon –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/openvswitch –namespace kolla –name openvswitch –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/neutron –namespace kolla –name neutron –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/nova-control –namespace kolla –name nova-control –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/service/nova-compute –namespace kolla –name nova-compute –values ./cloud.yaml

当nova-compute进入running状态后,创建cell0数据库,如下:

helm install –debug kolla-kubernetes/helm/microservice /nova-cell0-create-db-job –namespace kolla –name nova-cell0-create-db-job –values ./cloud.yaml

helm install –debug kolla-kubernetes/helm/microservice /nova-api-create-simple-cell-job –namespace kolla –name nova-api-create-simple-cell –values ./cloud.yaml

当上述全部POD进入running状态后,部署Cinder LVM。这里假设系统上已经有一个名为cinder-volumes的VG存在,如果还没有cinder-volume这个VG,则需要事先创建该VG,如下:

pvcreate /dev/sdb /dev/sdc

vgcreate cinder-volumes /dev/sdb /dev/sdc

安装部署cinder-volume,如下:

helm install –debug kolla-kubernetes/helm/service/cinder-volume-lvm –namespace kolla –name cinder-volume-lvm –values ./cloud.yaml

注意:如果要删除helm部署的charts,如cinder-volume-lvm,则通过命令:

helm delete cinder-volume-lvm –purge即可从kubernets集群中清除cinder-volume相关的PODs。

至此,全部Openstack服务已经部署完成,在操作Openstack集群之前,先等待所有Kubernetes集群中的PODs处于running状态;

查看kubernets集群中的全部deployment;

查看kubernets集群中的全部service;

可以看到,每个service都被自动分配了10.3.3.0/24网段的IP地址,并且可以看到各个service对应的端口。在确认Kubernetes的各个API对象正常运行后,便可通过Openstack命令行客户端进行Openstack集群操作。首先,生成并加载openrc文件,如下:

kolla-kubernetes/tools/build_local_admin_keystonerc.sh ext

source ~/keystonerc_admin

通过kolla-ansible提供的init-runonce脚本初始化Openstack,并launch一个VM,如下:

kolla-ansible/tools/init-runonce

创建一个FloatingIP地址,并将其添加到VM上,如下:

openstack server add floating ip demo1 $(openstack floating ip create public1 -f value -c floating_ip_address)

查看创建的VM;

登录Dashboard(http://192.168.128.13);

在dashboard上查看创建的实例;

创建一个块存储,并将其attach到实例demo1上;

到此,Ocata版本的Openstack已经成功部署在Kubernetes集群上。由于诸多原因,目前Kolla-kubernets项目仍然不具备生产环境部署条件,社区目前也仅支持AIO的开发实验性质的部署,相信随着K8S的兴趣,Kolla-kubernets项目的重视程度也会与日俱增,而且可以预言,在不久的将来,通过K8S部署Openstack容器云将会是Openstack的一大主流方向!

本文转移K8S技术社区-教程get | K8S部署OpenStack容器云(下)

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
借助阿里云ACK One注册集群,充分利用阿里云强大ACS GPU算力,实现DeepSeek推理模型高效部署。
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
862 0
|
9月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
753 11
|
12月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1132 33
|
Kubernetes 调度 异构计算
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
生产环境 K8S + Deepseek 实现大模型部署 和 容器调度(图解+史上最全)
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
1009 30
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
731 19
|
数据采集 消息中间件 Kubernetes
容器化爬虫部署:基于K8s的任务调度与自动扩缩容设计
随着业务复杂度提升,传统定时任务和手工扩缩容难以满足高并发与实时性需求。本文对比两种基于 Kubernetes 的爬虫调度与扩缩容方案:CronJob+HPA 和 KEDA。从调度灵活性、扩缩容粒度、实现难度等维度分析,并提供 YAML+Python 示例。方案 A(CronJob+HPA)适合固定定时任务,配置简单;方案 B(KEDA)支持事件驱动,适合高并发与异步触发场景。根据实际需求可混合使用,优化资源利用与效率。
445 4
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多