
# 更新对象存储卷访问密钥（AK/SK）后自动生效
如果您的业务容器依赖于对象存储服务来存储和读取数据，每次更改存储卷的访问密钥后，都必须手动重启所有相关的业务容器，以使新密钥生效，这可能会对业务的连续性产生一定影响。
CCE容器存储（Everest）支持更新对象存储卷访问密钥后自动生效的功能。当您更新了对象存储卷的访问密钥后，系统能够自动地检测到这一变化，并将所有受影响的工作负载配置为新的访问密钥，而无需手动重启工作负载，保证密钥更新期间业务也可以平稳运行。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.25集群：v1.25.16-r30及以上版本
  
  - v1.27集群：v1.27.16-r30及以上版本
  
  - v1.28集群：v1.28.15-r20及以上版本
  
  - v1.29集群：v1.29.13-r0及以上版本
  
  - v1.30集群：v1.30.10-r0及以上版本
  
  - v1.31集群：v1.31.6-r0及以上版本
  
  - v1.32集群：v1.32.1-r0及以上版本
  
  - 其他更高版本的集群
   
- 集群中需要安装2.4.150及以上版本的CCE容器存储（Everest）插件。
 
#### 约束与限制
- 插件版本为2.4.150及以上、2.4.165以下时，自动更新密钥的能力仅支持并行文件系统；2.4.165及以上时同时支持并行文件系统和对象桶。
- 自动更新密钥的能力仅针对CCE容器存储（Everest）插件更新至特定版本（并行文件系统需要2.4.150及以上，对象桶需要2.4.165版本及以上）后新建的工作负载。存量的工作负载如果要支持该能力，需要在Everest插件升级后，手动重建相应的工作负载，后续自动更新密钥的能力将自动生效。
 
#### 步骤一：确认工作负载支持自动更新密钥
由于更新对象存储卷访问密钥后自动生效的功能仅对Everest插件更新后新建的工作负载生效，您需要在确认Everest插件版本满足要求后，再次确认工作负载的启动时间是否晚于Everest插件升级时间。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏选择"插件中心"，在右侧查看CCE容器存储（Everest）插件版本是否已满足。 
   - 插件版本在2.4.150及以上：单击"编辑"，查看"高级配置 \> 扩展参数配置"中是否已开启动态更新AK/SK的能力，即**enable_aksk_refresh**参数需设置为true。
   
   - 插件版本在2.5.1及以上：默认使用委托凭据，支持动态更新AK/SK，无需上述配置可直接进行下一步。
   
   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002252106901.png "点击放大")
   
   
   
3. 确认集群中已经使用对象存储的工作负载及其运行的节点，以并行文件系统类型为例。 
   1. 在左侧导航栏选择"存储"，在右侧选择"存储卷声明"页签，查看全部命名空间下是否有使用并行文件系统的存储卷。 ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002217046948.png "点击放大")
      
      
   
   2. 使用kubectl命令确认所有命名空间下使用对应并行文件系统的存储，以default命名空间为例，其中*{pvc_name}* 为PVC的名称：
      ```
      kubectl get pods -n default -o custom-columns="POD:.metadata.name,PVC:.spec.volumes[*].persistentVolumeClaim.claimName,hostIP:.status.hostIP,UID:.metadata.uid" | grep {pvc_name}
      ```
      回显如下：
      ```
      obs-test-65c6dd7675-c67ss     obs      192.168.0.227   adb83cd4-58cc-4d01-a91a-584c6ed477fc
      ```
      表示名为*obs-test-65c6dd7675-c67ss* 的Pod中挂载了名为*obs* 的PVC，其运行的节点IP为192.168.0.227，其UID为*adb83cd4-58cc-4d01-a91a-584c6ed477fc*。
      
   
   
   
   
4. 登录工作负载Pod所在的节点，执行以下命令，确认升级后的Everest插件提供的obsfs工具的时间。 
   ```
   ls -l /usr/bin/obsfs
   ```
   回显如下，表示obsfs是3月20号下午17:09更新的。
   ```
   -rwx------ 1 root root 9424176 Mar 20 17:09 /usr/bin/obsfs
   ```
   
   
5. 确认Pod所在节点的obsfs进程启动时间。 
   ```
   ps -ef | grep {pod_uid}
   ```
   回显如下：
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002216881664.png "点击放大")
   表示Pod使用的obsfs进程是在10:34挂载的，晚于Everest更新obsfs工具的时间，所以该Pod是支持自动更新密钥的。
   如果Pod使用的obsfs进程早于Everest更新obsfs工具的时间，则需要手动重启Pod，后续自动更新密钥的能力将自动生效。
   
   
 
#### 步骤二：更新对象存储卷自定义访问密钥（AK/SK）
确认对象存储卷相关联的工作负载已支持自动更新密钥能力后，您可以更新对象存储卷自定义访问密钥（AK/SK）。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏选择"存储"，在右侧选择"存储卷声明"页签，单击并行文件系统的存储卷"更多 \> 更新访问密钥"。
3. 上传新的访问密钥（AK/SK）后，单击"确定"。 
   ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/caution_3.0-zh-cn.png)
   请确保更新后的密钥合法有效，且具备访问对应的对象存储卷的权限，否则将导致工作负载无法访问已挂载的对象存储。
   
   
 
#### 步骤三：确认工作负载密钥更新已经生效
更新对象存储使用的访问密钥后，正常情况下等待约30s后可通过Pod事件或告警确认更新是否生效。您可以通过以下步骤进行确认：
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧选择"工作负载"，单击工作负载名称，前往"工作负载详情"页面。
3. 单击实例操作栏中的"事件"进行查看。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002252100065.png "点击放大")
   
   如果有"failed to refresh ak/sk for xxx"的事件，表示本次工作负载密钥更新失败，根据提示确认失败原因，详情请参见[常见问题]。无异常告警或事件则表示更新成功。
   
   
 
 #### 常见问题
- 证书不合法，事件如下：
  ```
  failed to refresh ak/sk for xxx, reason: invalid credentials(host=xxx:443) - result of checking service.
  ```
  **解决方案：**
  请修改为合法的证书后重新查看异常是否解决。
  
- 更新AKSK超时失败，事件如下：
  ```
  failed to refresh ak/sk for xxx, reason: wait timeout...
  ```
  **解决方案：**
  Pod删除或者迁移导致obsfs进程退出，可能会偶现此告警，该场景属于正常情况，如果没有持续上报告警可不用关注。
  如果持续出现此告警，请尝试重建Pod后查看异常是否解决。
  
 
