启动实例

在包含容器基础设施管理服务的环境中,您可以配置由虚拟机或裸机服务器组成的容器集群。容器基础设施管理服务使用 集群模板 来描述如何构建一个 集群。在以下每个示例中,您将为特定的 COE 创建一个集群模板,然后使用相应的集群模板配置集群。然后,您可以使用适当的 COE 客户端或端点来创建容器。

创建外部网络(可选)

要创建 magnum 集群,您需要一个外部网络。如果没有外部网络,请创建一个。

  1. 根据您的云提供商对您的案例的支持,使用合适的提供商创建外部网络

    $ openstack network create public --provider-network-type vxlan \
                                      --external \
                                      --project service
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | UP                                   |
    | availability_zone_hints   |                                      |
    | availability_zones        |                                      |
    | created_at                | 2017-03-27T10:09:04Z                 |
    | description               |                                      |
    | dns_domain                | None                                 |
    | id                        | 372170ca-7d2e-48a2-8449-670e4ab66c23 |
    | ipv4_address_scope        | None                                 |
    | ipv6_address_scope        | None                                 |
    | is_default                | False                                |
    | mtu                       | 1450                                 |
    | name                      | public                               |
    | port_security_enabled     | True                                 |
    | project_id                | 224c32c0dd2e49cbaadfd1cda069f149     |
    | provider:network_type     | vxlan                                |
    | provider:physical_network | None                                 |
    | provider:segmentation_id  | 3                                    |
    | qos_policy_id             | None                                 |
    | revision_number           | 4                                    |
    | router:external           | External                             |
    | segments                  | None                                 |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | updated_at                | 2017-03-27T10:09:04Z                 |
    +---------------------------+--------------------------------------+
    $ openstack subnet create public-subnet --network public \
                                      --subnet-range 192.168.1.0/24 \
                                      --gateway 192.168.1.1 \
                                      --ip-version 4
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | 192.168.1.2-192.168.1.254            |
    | cidr              | 192.168.1.0/24                       |
    | created_at        | 2017-03-27T10:46:15Z                 |
    | description       |                                      |
    | dns_nameservers   |                                      |
    | enable_dhcp       | True                                 |
    | gateway_ip        | 192.168.1.1                          |
    | host_routes       |                                      |
    | id                | 04185f6c-ea31-4109-b20b-fd7f935b3828 |
    | ip_version        | 4                                    |
    | ipv6_address_mode | None                                 |
    | ipv6_ra_mode      | None                                 |
    | name              | public-subnet                        |
    | network_id        | 372170ca-7d2e-48a2-8449-670e4ab66c23 |
    | project_id        | d9e40a0aff30441083d9f279a0ff50de     |
    | revision_number   | 2                                    |
    | segment_id        | None                                 |
    | service_types     |                                      |
    | subnetpool_id     | None                                 |
    | updated_at        | 2017-03-27T10:46:15Z                 |
    +-------------------+--------------------------------------+
    

创建密钥对(可选)

要创建 magnum 集群,您需要一个密钥对,该密钥对将传递到集群的所有计算实例。如果您的项目没有密钥对,请创建一个。

  1. 在计算服务上创建密钥对

    $ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
    +-------------+-------------------------------------------------+
    | Field       | Value                                           |
    +-------------+-------------------------------------------------+
    | fingerprint | 05:be:32:07:58:a7:e8:0b:05:9b:81:6d:80:9a:4e:b1 |
    | name        | mykey                                           |
    | user_id     | 2d4398dbd5274707bf100a9dbbe85819                |
    +-------------+-------------------------------------------------+
    

将集群所需的镜像上传到镜像服务

Kubernetes 驱动程序需要 Fedora CoreOS 镜像。请参考每个 Magnum 版本的‘支持版本’。

  1. 下载镜像

    $ export FCOS_VERSION="35.20220116.3.0"
    $ wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/${FCOS_VERSION}/x86_64/fedora-coreos-${FCOS_VERSION}-openstack.x86_64.qcow2.xz
    $ unxz fedora-coreos-${FCOS_VERSION}-openstack.x86_64.qcow2.xz
    
  2. 将镜像注册到镜像服务,并将 os_distro 属性设置为 fedora-coreos

    $ openstack image create \
                          --disk-format=qcow2 \
                          --container-format=bare \
                          --file=fedora-coreos-${FCOS_VERSION}-openstack.x86_64.qcow2 \
                          --property os_distro='fedora-coreos' \
                          fedora-coreos-latest
    

配置 Kubernetes 集群并创建部署

按照此示例,您将配置一个包含一个 master 和一个 node 的 Kubernetes 集群。然后,使用 Kubernetes 的原生客户端 kubectl,您将创建一个部署。

  1. 使用 fedora-coreos-latest 镜像、m1.small 作为 master 和 node 的 flavor、public 作为外部网络以及 8.8.8.8 作为 DNS nameserver,创建 Kubernetes 集群模板,使用以下命令

    $ openstack coe cluster template create kubernetes-cluster-template \
                         --image fedora-coreos-latest \
                         --external-network public \
                         --dns-nameserver 8.8.8.8 \
                         --master-flavor m1.small \
                         --flavor m1.small \
                         --coe kubernetes
    
  2. 使用 mykey 作为密钥对,使用以下命令配置一个包含一个 node 和一个 master 的集群

    $ openstack coe cluster create kubernetes-cluster \
                            --cluster-template kubernetes-cluster-template \
                            --master-count 1 \
                            --node-count 1 \
                            --keypair mykey
    Request to create cluster b1ef3528-ac03-4459-bbf7-22649bfbc84f has been accepted.
    

    您的集群现在正在创建。创建时间取决于您的基础设施性能。您可以使用以下命令检查集群状态:openstack coe cluster listopenstack coe cluster show kubernetes-cluster

    $ openstack coe cluster list
    +--------------------------------------+--------------------+---------+------------+--------------+-----------------+
    | uuid                                 | name               | keypair | node_count | master_count | status          |
    +--------------------------------------+--------------------+---------+------------+--------------+-----------------+
    | b1ef3528-ac03-4459-bbf7-22649bfbc84f | kubernetes-cluster | mykey   | 1          | 1            | CREATE_COMPLETE |
    +--------------------------------------+--------------------+---------+------------+--------------+-----------------+
    
  3. 将上述集群的凭据添加到您的环境

    $ mkdir -p ~/clusters/kubernetes-cluster
    $ cd ~/clusters/kubernetes-cluster
    $ openstack coe cluster config kubernetes-cluster
    

    上述命令会将身份验证工件保存到目录 ~/clusters/kubernetes-cluster 中。它将输出一个命令来设置 KUBECONFIG 环境变量

    export KUBECONFIG=/home/user/clusters/kubernetes-cluster/config
    
  4. 您可以列出 Kubernetes 集群的控制器组件,并检查它们是否为 Running

    $ kubectl -n kube-system get po
    NAME                                                                            READY     STATUS    RESTARTS   AGE
    kube-controller-manager-ku-hesuip7l3i-0-5mqijvszepxw-kube-master-rqwmwne7rjh2   1/1       Running   0          1h
    kube-proxy-ku-hesuip7l3i-0-5mqijvszepxw-kube-master-rqwmwne7rjh2                1/1       Running   0          1h
    kube-proxy-ku-wmmticfvdr-0-k53p22xmlxvx-kube-minion-x4ly6zfhrrui                1/1       Running   0          1h
    kube-scheduler-ku-hesuip7l3i-0-5mqijvszepxw-kube-master-rqwmwne7rjh2            1/1       Running   0          1h
    kubernetes-dashboard-3203831700-zvj2d                                           1/1       Running   0          1h
    
  5. 现在,您可以创建一个 nginx 部署并验证它是否正在运行

    $ kubectl run nginx --image=nginx --replicas=5
    deployment "nginx" created
    $ kubectl get po
    NAME                    READY     STATUS    RESTARTS   AGE
    nginx-701339712-2ngt8   1/1       Running   0          15s
    nginx-701339712-j8r3d   1/1       Running   0          15s
    nginx-701339712-mb6jb   1/1       Running   0          15s
    nginx-701339712-q115k   1/1       Running   0          15s
    nginx-701339712-tb5lp   1/1       Running   0          15s
    
  6. 删除集群

    $ openstack coe cluster delete kubernetes-cluster
    Request to delete cluster kubernetes-cluster has been accepted.