---
title: 机密容器部署（可选）
description: "若选择机密安全部署，需参考此章节进行机密容器部署。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaiagent/bestpractice/aiagent-0194.html
sourcePath: /source/zh/kunpengaiagent/bestpractice/aiagent-0194.html
indexId: 90af379ebd959dc9bd7470daf50b5b92c3eb05eaf48e91084092ab55d71d40fe56
---
# 机密容器部署（可选）

若选择机密安全部署，需参考此章节进行机密容器部署。

以下为单节点部署步骤，如需多节点部署，则每个节点均需执行如下步骤。


1. 参考环境配置完成BMC、BIOS和TMM固件烧写，virtCCA TEE License安装，以及BIOS菜单中配置TEE支持。
2. 参考部署核心组件确保host kernel满足版本要求并添加内核启动参数virtcca_cvm_host=1（使用机密容器无需安装libvirt、QEMU和edk2）。
  完成步骤1和步骤2后基础virtCCA机密计算环境已使能，执行如下命令后回显中有版本号即说明使能成功。

```
dmesg | grep -i tmi
```


3. 部署cc-operator-controller-manager。

```
wget https://raw.gitcode.com/openeuler/virtCCA_sdk/raw/master/kata-v3.15.0/conf/cc-operator.yaml
kubectl apply -f cc-operator.yaml
```


4. 部署CcRuntime。

  a. 获取virtCCA的CcRuntime部署yaml配置文件。

```
wget https://raw.gitcode.com/openeuler/virtCCA_sdk/raw/master/kata-v3.15.0/conf/virtcca-kata-deploy.yaml
```


  b. 修改yaml配置文件中的label。
    matchLabels字段可通过kubectl get nodes --show-labels查看，修改为对应label，具体以下图为例，node-role.kubernetes.io/worker表示键，worker为值，和matchLabels字段下键值对保持一致。

    payloadImage字段指定了kata-deploy镜像路径，可直接使用默认镜像：swr.cn-north-4.myhuaweicloud.com/kunpeng-ai/virtcca-kata-deploy:latest。

  c. 镜像拉取方式修改为host pull。

```
sed -i '/- name: kata-qemu-virtcca/{n;s/pulltype: .*/pulltype: ""/;n;s/snapshotter: .*/snapshotter: ""/}' virtcca-kata-deploy.yaml
```


  d. 启动deploy部署。

```
kubectl apply -f virtcca-kata-deploy.yaml
```


    创建成功后confidential-containers-system命名空间下有一个cc-operator-controller和两个DaemonSet管理的Pod。

```
kubectl get pod -n confidential-containers-system -o wide
```


    如果部署confidential-container-operator失败，且operator Pod日志中的关键错误为“Get "https://x.x.x.x:443/api/v1": dial tcp x.x.x.x:443: i/o timeout”时，可按照以下思路进行排查。 确认组件和iptables状态，网络组件是DaemonSet，确认当前系统默认iptables后端。 kubectl -n kube-system get ds -o wide 显式设置Calico使用nft后端。 kubectl -n kube-system set env daemonset/calico-node FELIX_IPTABLESBACKEND=NFT kubectl -n kube-system rollout status daemonset/calico-node --timeout=180s 清理legacy表残留规则，legacy filter默认策略设为ACCEPT，并验证legacy清理状态。 重建cc-operator Pod并验证恢复。 kubectl delete pod -n confidential-containers-system -l control-plane=controller-manager kubectl -n confidential-containers-system wait --for=condition=Ready pod -l control-plane=controller-manager --timeout=180s kubectl -n confidential-containers-system get pod -o wide

5. K8s集群中已注册virtCCA对应的RuntimeClass。

```
kubectl get runtimeclass
```


6. 修改“/opt/kata/share/defaults/kata-containers/configuration-qemu-virtcca.toml”，配置文件，配置共享文件系统协议修改为virtio-fs，默认vcpu数量修改为2，默认内存大小修改为3072M，可根据实际需求针对性调整。

```
sed -i 's/shared_fs = "none"/shared_fs = "virtio-fs"/; s/default_vcpus = 1/default_vcpus = 2/; s/default_memory = 2048/default_memory = 3072/' /opt/kata/share/defaults/kata-containers/configuration-qemu-virtcca.toml
```


7. 重启Containerd。

```
systemctl restart containerd
```


8. 创建机密容器，通过部署一个测试Pod，验证鲲鹏机密容器运行时已正确配置并生效。

  a. 创建配置文件。

```
vi ./test-kata-qemu-virtcca.yaml
```


  b. 按“i”进入编辑模式，输入以下内容。

```
apiVersion: v1
kind: Pod
metadata:
name: test-kata-qemu-virtcca
annotations:
io.containerd.cri.runtime-handler: "kata-qemu-virtcca"
io.katacontainers.config.hypervisor.kernel_params: "agent.debug_console agent.log=debug"
spec:
runtimeClassName: kata-qemu-virtcca
terminationGracePeriodSeconds: 5
containers:
- name: box-1
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/busybox:latest-linuxarm64
imagePullPolicy: Always
command:
- sh
tty: true
```


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
  d. 读取yaml配置文件创建Pod。

```
kubectl apply -f test-kata-qemu-virtcca.yaml
```


  e. 查看Pod集群状态。

```
kubectl get pod -A
```


    如下图所示，看到test-kata-qemu-virtcca Pod状态为Running即为成功。
