Kubernetes VIM 安装¶
Tacker 使用 devstack-plugin-container 来部署 Kubernetes 集群。
编辑
local.conf以配置 Kubernetes为 devstack-plugin-container 添加以下插件配置。
# Enable devstack-plugin-container, crio KUBERNETES_VIM=True # It is necessary to specify the patch version # because it is the version used when executing "apt-get install" command. K8S_VERSION="1.30.5" K8S_TOKEN="9agf12.zsu5uh2m4pzt3qba" CONTAINER_ENGINE="crio" CRIO_VERSION="1.30.5" enable_plugin devstack-plugin-container https://opendev.org/openstack/devstack-plugin-container master
公共网络用于在 Kubernetes 中为 Service 启动 LoadBalancer。设置公共子网的描述见 [1]。
在 CentOS 环境中,在执行 stack.sh 之前安装 Kubernetes 包并启动 ovn 服务。
命令
$ sudo cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF $ sudo chmod 755 /etc/yum.repos.d/kubernetes.repo $ sudo dnf install kubeadm -y $ sudo yum install -y centos-release-openstack-victoria $ sudo yum install -y openvswitch $ sudo yum install -y openvswitch-ovn-common $ sudo yum install -y openvswitch-ovn-central $ sudo yum install -y openvswitch-ovn-host $ sudo systemctl start ovn-northd.service $ sudo systemctl start ovn-controller.service $ sudo systemctl start ovs-vswitchd.service $ sudo systemctl start ovsdb-server.service
运行 devstack 安装
命令
$ ./stack.sh设置 Kubernetes VIM 配置
如果您完成了 devstack 安装,现在就可以注册 Kubernetes VIM 了。您可以使用专用的脚本来完成这项工作,也可以从头开始编辑配置文件来设置 Kubernetes VIM 的配置。
第一种方法是运行
gen_vim_config.sh,并使用选项生成配置文件,如 此处 所述。转到TACKER_ROOT目录,该目录是 tacker 仓库的根目录。您至少需要添加-t k8s以指定 Kubernetes,否则它将生成 OpenStack 的配置。您可以跳过Register Kubernetes VIM部分之前的步骤。$ cd TACKER_ROOT $ bash tools/gen_vim_config.sh -t k8s
该脚本尝试从您的环境中获取所有必需的参数,尽管您可以使用特定选项提供任何参数。有关详细信息,请参阅帮助消息中的用法,
-h选项。另一方面,如果您从头开始编辑配置文件,则需要使用
kubectl命令获取所需的参数。创建 Secret
首先,您可以检查是否已经存在包含 bearer token 的 Secret。如果不存在,您可以根据以下文件创建 Secret。如果已经存在,请跳过此步骤,并从 获取“Bearer Token” 开始。
$ cat default-token.yaml apiVersion: v1 kind: Secret metadata: name: default-token-cfx5m namespace: default annotations: kubernetes.io/service-account.name: "default" type: kubernetes.io/service-account-token
使用
default-token.yaml创建 Secret。命令
$ kubectl apply -f default-token.yaml
结果
secret/default-token-cfx5m created
获取“Bearer Token”
您需要确认包含 bearer token 的 Kubernetes Secret 名称。
命令
$ kubectl get secret
结果
NAME TYPE DATA AGE default-token-cfx5m kubernetes.io/service-account-token 3 94m
然后,您可以获取 bearer token。
命令
$ TOKEN=$(kubectl get secret default-token-cfx5m -o jsonpath="{.data.token}" | base64 --decode) && echo $TOKEN
结果
eyJhbGciOiJSUzI1NiIsImtpZCI6ImdTeGhkUlBNRkJwemo0eXdpMmxxT2Y1aWkzYUhwRERCTWlxMzZFemFKSkUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tY2Z4NW0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNhOTNiNjA0LTJjY2EtNDllZi05ODMwLWI5NDZhZjI2OTAyNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.yWmZMKuCRn_9Hw07wzee2Gr072NcexuKkaG2HaBamd3BOOAaypb7a12UiKcjqQYsDq32jVGMswSroTJOJtm7xccVbU2lz6CMhTRtDbPKOQm7DLyYdpBoRAoqE8fpy4aF5agqpFYmhYHBoz2VC-sgTwWjuY5XkJ81X9rZWlTCj9p3QkanH2z77lLXo-muthDOOuNm_J05FyR_J1epYXm8JbEpTrj1upaQoKZ9hoKKQrd1crW0stqymcyiLxfPGtSW8dO6GZS4v1vTiIhAEBg3kyQsOPz_nEmDxuYXrcMJxQV8MxWvm3uLOu7wN6-MPsSdw1CQdOfjycTh0D9rG4pxUw注意
在 Kubernetes 数据模型中,
.data下包含的值使用 Base64 格式编码,因此您必须使用base64 --decode或base64 -d命令对其进行解码,才能将其用作 bearer token。在使用此 token 之前,用户必须将管理员角色应用于此 token。
命令
$ kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole cluster-admin --serviceaccount=default:default
结果
clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created获取 ssl_ca_cert
用户可以获取有关验证 Kubernetes 集群的更多信息。
命令
$ kubectl get secrets default-token-cfx5m -o jsonpath="{.data.ca\.crt}" | base64 --decode
结果
-----BEGIN CERTIFICATE----- MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl cm5ldGVzMB4XDTIxMDkwOTA0MDc0NFoXDTMxMDkwNzA0MDc0NFowFTETMBEGA1UE AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN7H /ttxemXTrCDCvN59+g22wwWr5GWUEBxQQz04OPXz1GxBY0H2h3fToRdSs3+snD2h 6bZ8uryxvXTAlml0IBue/nBxKVRMCRTfqEHEPeNo1yHL2thWGYDfKwEZr9Eg72F5 mxu9wYdfQS61wg9b4kLmHCIjA58wBDv8Osccs+28BpxJaBd1oG25JWZhcCFRTQur URy6d1885ahvaqP9L9mhR8zVzVkAr2noNrCo4/bVMIea8n3yQPBKe3ND1UcxpoCk UrfWCrrFsG93RtiivLFJjG8UgUkUhzRfTFoMnTX51Qm2/q/5GZqXSd6z+nU7Bp47 DHa0hNSPpKnRnP2WwdECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFICl4EHfUar/PBfVTfgymIYXe/z5MA0GCSqGSIb3 DQEBCwUAA4IBAQA8i+HhuNIJZheNfLgZ+svxmpa1AtdPv8QTrkXTn5OvBJ6l2A2e 23fVG+8Eolmd0pwuWCMGv4UKAQ45hCMFKMkuKNs2akYueujTxTLwsIu+1EAVnzWp E5n+RAhgkAZ18VAGW0otrP/T2zFvci9o3pnEYnQ9Es1mFX7GkBbiI/4qYqx5ysZr i5We9jMO//ouJxliJAemRCHMjdqrooMb3k0QyT2lN/1O0TXj0a96pTxoAyivllwk LYnc2CoRegU81LeUPSNJRe5+A6kdXixL12F1182/LQgXWkdRnYwoMypyEUDEr9kf eGr2fBQ+2ywKH7Ho/HVRW+WcJbXt5nfMX5NK -----END CERTIFICATE-----
获取 Kubernetes 服务器 URL
默认情况下,Kubernetes API 服务器监听 https://127.0.0.1:6443 和 https://{HOST_IP}:6443。用户可以通过
kubectl cluster-info命令获取此信息,并尝试使用上一步描述的 bearer token 访问 API 服务器。首先,您需要确认 Kubernetes 集群暴露的 API 端点。
命令
$ kubectl cluster-info
结果
Kubernetes control plane is running at https://172.30.202.39:6443 To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
然后,您可以确认 API 端点和您的 bearer token 可用。
命令
$ curl -k https://172.30.202.39:6443/api/ -H "Authorization: Bearer $TOKEN"
结果
{ "kind": "APIVersions", "versions": [ "v1" ], "serverAddressByClientCIDRs": [ { "clientCIDR": "0.0.0.0/0", "serverAddress": "172.30.202.39:6443" } ] }
注意
由于 Kubernetes API 服务器使用的 SSL 证书是自签名的,curl 在响应中返回 SSL 证书问题。用户可以使用
-k或--insecure选项忽略 SSL 证书警告,或者使用--cacert <path/to/ssl_ca_cert_file>选项使用 ssl_ca_cert 来验证 API 服务器的 SSL 证书。
注册 Kubernetes VIM
在
vim_config.yaml中,project_name 固定为“default”,这将用于将来在 Kubernetes 上支持多租户。创建 Kubernetes VIM 的
vim_config.yaml文件,如下例所示auth_url: "https://172.30.202.39:6443" bearer_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6ImdTeGhkUlBNRkJwemo0eXdpMmxxT2Y1aWkzYUhwRERCTWlxMzZFemFKSkUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tY2Z4NW0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNhOTNiNjA0LTJjY2EtNDllZi05ODMwLWI5NDZhZjI2OTAyNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.yWmZMKuCRn_9Hw07wzee2Gr072NcexuKkaG2HaBamd3BOOAaypb7a12UiKcjqQYsDq32jVGMswSroTJOJtm7xccVbU2lz6CMhTRtDbPKOQm7DLyYdpBoRAoqE8fpy4aF5agqpFYmhYHBoz2VC-sgTwWjuY5XkJ81X9rZWlTCj9p3QkanH2z77lLXo-muthDOOuNm_J05FyR_J1epYXm8JbEpTrj1upaQoKZ9hoKKQrd1crW0stqymcyiLxfPGtSW8dO6GZS4v1vTiIhAEBg3kyQsOPz_nEmDxuYXrcMJxQV8MxWvm3uLOu7wN6-MPsSdw1CQdOfjycTh0D9rG4pxUw" ssl_ca_cert: "None" project_name: "default" type: "kubernetes"
或者启用
ssl_ca_cert的vim_config.yamlauth_url: "https://172.30.202.39:6443" bearer_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6ImdTeGhkUlBNRkJwemo0eXdpMmxxT2Y1aWkzYUhwRERCTWlxMzZFemFKSkUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tY2Z4NW0iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjNhOTNiNjA0LTJjY2EtNDllZi05ODMwLWI5NDZhZjI2OTAyNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.yWmZMKuCRn_9Hw07wzee2Gr072NcexuKkaG2HaBamd3BOOAaypb7a12UiKcjqQYsDq32jVGMswSroTJOJtm7xccVbU2lz6CMhTRtDbPKOQm7DLyYdpBoRAoqE8fpy4aF5agqpFYmhYHBoz2VC-sgTwWjuY5XkJ81X9rZWlTCj9p3QkanH2z77lLXo-muthDOOuNm_J05FyR_J1epYXm8JbEpTrj1upaQoKZ9hoKKQrd1crW0stqymcyiLxfPGtSW8dO6GZS4v1vTiIhAEBg3kyQsOPz_nEmDxuYXrcMJxQV8MxWvm3uLOu7wN6-MPsSdw1CQdOfjycTh0D9rG4pxUw" ssl_ca_cert: "-----BEGIN CERTIFICATE----- MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl cm5ldGVzMB4XDTIxMDkwOTA0MDc0NFoXDTMxMDkwNzA0MDc0NFowFTETMBEGA1UE AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN7H /ttxemXTrCDCvN59+g22wwWr5GWUEBxQQz04OPXz1GxBY0H2h3fToRdSs3+snD2h 6bZ8uryxvXTAlml0IBue/nBxKVRMCRTfqEHEPeNo1yHL2thWGYDfKwEZr9Eg72F5 mxu9wYdfQS61wg9b4kLmHCIjA58wBDv8Osccs+28BpxJaBd1oG25JWZhcCFRTQur URy6d1885ahvaqP9L9mhR8zVzVkAr2noNrCo4/bVMIea8n3yQPBKe3ND1UcxpoCk UrfWCrrFsG93RtiivLFJjG8UgUkUhzRfTFoMnTX51Qm2/q/5GZqXSd6z+nU7Bp47 DHa0hNSPpKnRnP2WwdECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB /wQFMAMBAf8wHQYDVR0OBBYEFICl4EHfUar/PBfVTfgymIYXe/z5MA0GCSqGSIb3 DQEBCwUAA4IBAQA8i+HhuNIJZheNfLgZ+svxmpa1AtdPv8QTrkXTn5OvBJ6l2A2e 23fVG+8Eolmd0pwuWCMGv4UKAQ45hCMFKMkuKNs2akYueujTxTLwsIu+1EAVnzWp E5n+RAhgkAZ18VAGW0otrP/T2zFvci9o3pnEYnQ9Es1mFX7GkBbiI/4qYqx5ysZr i5We9jMO//ouJxliJAemRCHMjdqrooMb3k0QyT2lN/1O0TXj0a96pTxoAyivllwk LYnc2CoRegU81LeUPSNJRe5+A6kdXixL12F1182/LQgXWkdRnYwoMypyEUDEr9kf eGr2fBQ+2ywKH7Ho/HVRW+WcJbXt5nfMX5NK -----END CERTIFICATE-----" project_name: "default" type: "kubernetes"
运行 Tacker 命令注册 VIM
命令
$ openstack vim register --config-file vim_config.yaml vim-kubernetes
结果
+----------------+-----------------------------------------------+ | Field | Value | +----------------+-----------------------------------------------+ | auth_cred | { | | | "bearer_token": "***", | | | "ssl_ca_cert": "None", | | | "auth_url": "https://172.30.202.39:6443", | | | "username": "None", | | | "key_type": "barbican_key", | | | "secret_uuid": "***", | | | "password": "***" | | | } | | auth_url | https://172.30.202.39:6443 | | created_at | 2021-09-17 01:26:28.372552 | | description | | | id | 884ec305-c8ca-47ef-8cba-fafceabeda30 | | is_default | False | | name | vim-kubernetes | | placement_attr | { | | | "regions": [ | | | "default", | | | "kube-node-lease", | | | "kube-public", | | | "kube-system" | | | ] | | | } | | project_id | 8cd3cc798ae14227a84f7b50c5ef984a | | status | ACTIVE | | type | kubernetes | | updated_at | None | | vim_project | { | | | "name": "default" | | | } | +----------------+-----------------------------------------------+
在
placement_attr中,有四个区域:‘default’、‘kube-node-lease’、‘kube-public’ 和 ‘kube-system’,它们映射到 Kubernetes 环境中的namespace。成功安装 VIM 后,您可以按如下方式获取 VIM 信息
命令
$ openstack vim list
结果
+--------------------------------------+----------------+----------------------------------+------------+------------+--------+ | ID | Name | Tenant_id | Type | Is Default | Status | +--------------------------------------+----------------+----------------------------------+------------+------------+--------+ | 884ec305-c8ca-47ef-8cba-fafceabeda30 | vim-kubernetes | 8cd3cc798ae14227a84f7b50c5ef984a | kubernetes | False | ACTIVE | +--------------------------------------+----------------+----------------------------------+------------+------------+--------+
您可以使用 openstack vim set 更新这些 VIM 信息
命令
$ openstack vim set --config-file path/to/updated/config 884ec305-c8ca-47ef-8cba-fafceabeda30
在更新 Kubernetes VIM 时,您可以更新 VIM 信息(例如 bearer_token 和 ssl_ca_cert),但不包括 VIM 的 auth_url 和类型。
您可以使用 openstack vim show 获取 VIM 信息的详细信息
命令
$ openstack vim show 884ec305-c8ca-47ef-8cba-fafceabeda30
如果您不再使用 Kubernetes VIM,可以使用 openstack vim delete 删除它
命令
$ openstack vim delete 884ec305-c8ca-47ef-8cba-fafceabeda30