本文主要为您介绍Kubernetes集群中应用的常见问题。
为什么拉取镜像速度慢或拉取失败?
您可以按照以下方式对拉取镜像慢或失败的问题进行排查:
- 如果您拉取的是Docker Hub中的国外镜像,或当前网络条件比较差,建议您手动拉取镜像到本地节点,然后重启Pod,或将镜像上传到ACR中,使用ACR拉取镜像。具体操作,请参见使用企业版实例推送和拉取镜像和使用免密组件拉取容器镜像。
- 如果您使用ACR拉取镜像,请确认用户名或密码是否正确。建议使用免密插件拉取镜像,具体操作,请参见使用免密组件拉取容器镜像。
- 确认发起请求的客户端是否具备公网能力,如果没有,您需要为客户端设置公网。
如何手动升级Helm的版本?
如何支持私有镜像?
执行以下命令创建Secret。
kubectl create secret docker-registry regsecret --docker-server=registry-internal.cn-hangzhou.aliyuncs.com --docker-username=abc****@aliyun.com --docker-password=**** --docker-email=abc****@aliyun.com
说明
regsecret
:指密钥的键名称,可自定义。—docker-server
:指Docker仓库地址。—docker-username
:指Docker仓库用户名。—docker-password
:指Docker仓库登录密码。- 可选:
—docker-email
:指邮件地址。
您可以通过以下两种方法操作:
- 手动配置私有镜像
YAML文件加入密钥参数。
containers: - name: foo image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0 imagePullSecrets: - name: regsecret
说明imagePullSecrets
是声明拉取镜像时需要指定密钥。regsecret
必须和上面生成密钥的键名一致。image
中的Docker仓库名称必须和--docker-server
中的Docker仓库名一致。
更多信息,请参见使用私有仓库。
- 自动配置私有镜像实现无密钥编排
说明 为了避免每次使用私有镜像部署时,都需要引用密钥,您可将Secret添加到Namespace的Default Service Account中。更多信息,请参见Add ImagePullSecrets to a service account。
- 执行以下命令,查看创建的拉取私有镜像的Secret。
kubectl get secret regsecret
预期输出:
本例中采用手动配置的方式,修改命名空间的默认服务账号Default,从而将此Secret作为imagePullSecret。NAME TYPE DATA AGE regsecret kubernetes.io/dockerconfigjson 1 13m
- 创建一个sa.yaml配置文件,将服务账号Default的配置导入到该文件中。
kubectl get serviceaccounts default -o yaml > ./sa.yaml
- 执行以下命令查看sa.yaml文件详情。
cat sa.yaml
预期输出:
apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default resourceVersion: "243024" #注意该项selfLink: /api/v1/namespaces/default/serviceaccounts/default。 uid: 052fb0f4-3d50-11e5-b066-42010af0**** secrets: - name: default-token-uudgeoken-uudge
- 执行
vim sa.yaml
命令,删除resourceVersion,并增加拉取镜像的密钥配置项imagePullSecrets。修改后的配置如下所示:apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0**** secrets: - name: default-token-uudge imagePullSecrets: #增加该项。 - name: regsecret
- 执行以下命令将sa.yaml配置文件替换Default的服务账号配置。
kubectl replace serviceaccount default -f ./sa.yaml
预期输出:
serviceaccount "default" replaced
- 创建Tomcat示例应用。
Tomcat编排示例tomcat.yaml文件如下所示:
apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat spec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0 #替换为您自己的私有镜像地址Ports。 - containerPort: 8080
执行以下命令创建Tomcat应用。
kubectl create -f tomcat.yaml
- Pod启动成功后执行以下命令,可看到预期的配置。
kubectl get pod tomcat-**** -o yaml
预期输出:
spec: imagePullSecrets: - nameregsecretey
- 执行以下命令,查看创建的拉取私有镜像的Secret。
如何在国外地域的ACK集群中使用国内地域的容器镜像服务企业版的镜像?
在此种场景下,您需要在国内地域购买标准版和高级版的容器镜像服务企业版,在国外地域购买基础版的容器镜像服务企业版。
完成购买后,您需要使用同步实例的方法将国内地域的镜像同步到国外地域,具体操作,请参见同账号同步实例。在国外地域的容器镜像服务企业版中获取镜像地址,然后在国外地域的ACK集群中使用镜像地址创建应用。
如果您使用容器镜像服务个人版,同步镜像的速度将非常慢。如果您使用的是自建仓库,您需要购买GA加速。
说明 自建仓库和购买GA加速的成本比购买容器镜像服务企业版高,推荐您使用容器镜像服务企业版。
关于容器镜像服务企业版的计费方式,请参见计费说明。