置备 TKG 集群后,最好部署一个测试工作负载并验证集群功能。

部署测试应用程序,以验证您的 TKG 集群已启动并正在运行。

前提条件

  • 置备 TKG 集群。
  • 连接到 TKG 集群。

过程

  1. 置备 TKG 集群。
  2. 使用 kubectl 登录到 主管
    kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME>
  3. 将配置环境切换到置备了 TKGS 集群的 vSphere 命名空间
    kubectl config use-context VSPHERE-NAMESPACE
  4. 登录到目标 TKG 集群。
    kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME> \
    --tanzu-kubernetes-cluster-name CLUSTER-NAME \
    --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
  5. 使用以下内容创建 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
    
  6. 创建 regcred 注册表凭据。
    用于此场景的容器映像 (busybox) 从公用 Docker Hub 注册表中提取,这可能会限制映像提取。如果出现这种情况,您需要使用 Pod 规范中引用的 Docker Hub 帐户和映像提取密钥 ("regcred")。要创建此密钥,请参见 创建专用注册表凭据密钥
  7. 根据需要配置 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"
    ...
  8. 应用 YAML。
    kubectl apply -f ping-pod.yaml
    预期结果:
    pod/ping-pod created
  9. 检查 Pod 是否已成功完成。
    kubectl get pods -n default
    NAME       READY   STATUS      RESTARTS   AGE
    ping-pod   0/1     Completed   0          13s
    
  10. 验证 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
    
  11. 删除 Pod。
    kubectl delete -f ping-pod.yaml
  12. 验证 pod 是否已删除。
    kubectl get pods