置备 TKG 集群后,最好部署一个测试工作负载并验证集群功能。
部署测试应用程序,以验证您的 TKG 集群已启动并正在运行。
前提条件
- 置备 TKG 集群。
- 连接到 TKG 集群。
过程
- 置备 TKG 集群。
- 使用 kubectl 登录到 主管。
kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME>
- 将配置环境切换到置备了 TKGS 集群的 vSphere 命名空间。
kubectl config use-context VSPHERE-NAMESPACE
- 登录到目标 TKG 集群。
kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME> \ --tanzu-kubernetes-cluster-name CLUSTER-NAME \ --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
- 使用以下内容创建
ping-pod.yaml
文件。apiVersion: v1 kind: Pod metadata: name: ping-pod namespace: default spec: containers: - image: busybox:1.34 name: busybox command: ["ping", "-c"] args: ["1", "8.8.8.8"] imagePullSecrets: - name: regcred restartPolicy: Never
- 创建
regcred
注册表凭据。用于此场景的容器映像 (busybox) 从公用 Docker Hub 注册表中提取,这可能会限制映像提取。如果出现这种情况,您需要使用 Pod 规范中引用的 Docker Hub 帐户和映像提取密钥 ("regcred")。要创建此密钥,请参见 创建专用注册表凭据密钥。 - 根据需要配置 Pod 安全性。
如果使用的是 Tanzu Kubernetes 版本 v1.24 或更低版本,请继续执行下一步,然后创建 Pod。如果使用的是 Tanzu Kubernetes 版本 v1.25,将启用 PSA 警告。您可以继续执行下一步,然后创建 Pod。但是请注意,您将收到有关 Pod 安全违规的警告,可以忽略该警告。
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "busybox" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "busybox" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "busybox" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "busybox" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
如果使用的是 Tanzu Kubernetes 版本 v1.26 或更高版本,将实施 PSA 限制。如果尝试按照下一步所示创建 Pod,操作将失败并显示以下错误。Error from server (Forbidden): error when creating "ping-pod.yaml": pods "ping-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "busybox" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "busybox" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "busybox" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "busybox" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
要解决此问题,请在创建 Pod 的default
命名空间中运行以下命令。请注意,这样做将移除命名空间上的 PSA 限制。kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
或者,也可以将 securityContext 直接应用于 Pod,例如:... spec: containers: - image: busybox:1.34 name: busybox command: ["ping", "-c"] args: ["1", "8.8.8.8"] securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] runAsNonRoot: true runAsUser: 1000 seccompProfile: type: "RuntimeDefault" ...
- 应用 YAML。
kubectl apply -f ping-pod.yaml
预期结果:pod/ping-pod created
- 检查 Pod 是否已成功完成。
kubectl get pods -n default
NAME READY STATUS RESTARTS AGE ping-pod 0/1 Completed 0 13s
- 验证 Pod 是否已对 DNS 服务器执行 ping 操作。
kubectl logs ping-pod -f
预期结果:PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: seq=0 ttl=106 time=33.352 ms --- 8.8.8.8 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 33.352/33.352/33.352 ms
- 删除 Pod。
kubectl delete -f ping-pod.yaml
- 验证 pod 是否已删除。
kubectl get pods