首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes集群环境常见问题解决

Kubernetes集群环境常见问题解决

作者头像
用户5166556
发布2020-01-17 17:44:26
1.8K0
发布2020-01-17 17:44:26
举报

”本文主要分享了k8s集群环境下,镜像不能自动拉取、容器执行错误、镜像导入导出、集群崩溃常见问题解决“

1、Kubernetes集群环境下各个node镜像不能自动拉取

一般情况下遇到这种情况下,比较笨的办法是可以通过人肉的方式登录到每个节点通过docker login docker pull的形式获取镜像,想象下,如果成百上千个节点......

一般出现此类问题在私有仓库和云厂商分别解决方法如下。

  • 专有镜像的集群,比如一些个人或者公司搭建私有仓库,以下是解决该问题步骤
  1. docker login [server]针对要使用的每组凭据运行。这将更新$HOME/.docker/config.json;
  2. $HOME/.docker/config.json在编辑器中查看,以确保它仅包含您要使用的凭据;
  3. 将当前节点.docker/config.json复制到其它节点,命令如下;
for n in $nodes; do scp ~/.docker/config.json root@$n:/var/lib/kubelet/config.json; done

4. 创建pod测试拉取镜像;

kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: private-image-test-1
spec:
  containers:
    - name: uses-private-image
      image: your image
      imagePullPolicy: Always
      command: [ "echo", "SUCCESS" ]
EOF
pod/private-image-test-1 created

5. 如果一切正常,执行如下命令。

kubectl logs private-image-test-1
SUCCESS
  • 对于Google Kubernetes Engine,GCE以及任何自动创建节点的云提供商,目前建议使用此方法,以下是解决步骤
  1. 使用docker命令创建密钥;
kubectl create secret docker-registry <name> --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

2. 在Pod上引用imagePullSecrets;

cat <<EOF > pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: foo
  namespace: awesomeapps
spec:
  containers:
    - name: foo
      image: jan/awesomeapp:v1
  imagePullSecrets:
    - name: myregistrykey
EOF

cat <<EOF >> ./kustomization.yaml
resources:
- pod.yaml
EOF

2、k8s或者docker提示exec format error

[root@k8s-master k8s_spider]# k get pod
NAME                                      READY   STATUS             RESTARTS   AGE
private-image-test-1                      0/1     CrashLoopBackOff   5          5m5s
registry-deployment                       0/1     CrashLoopBackOff   20         80m
[root@k8s-master k8s_spider]# kubectl logs private-image-test-1
standard_init_linux.go:211: exec user process caused "exec format error"

遇到这种问题一般都是镜像问题,当前镜像不能在当前docker环境中执行,比如你的镜像是基于arm架构CPU编译,把镜像放到x86下运行,自然就会出现镜像不兼容导致格式错误。

3、镜像下载问题

在某些环境下可能会出现本台机器不能连接外网或者docker仓库这个时候我们可以通过如下方式把镜像导入进来:

1. 保存镜像

docker save -o ./coredns.tar k8s.gcr.io/coredns:1.3.1

2.导出镜像

docker load --input coredns.tar

用户也可以使用 docker import 导入export导出一个容器快照到本地镜像库。这两者的区别在于 import 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

4、无法获取到当前节点、pod 提示6443端口不通,如下所示:

Failed to list *v1.ConfigMap: Get https://192.168..20:6443/api/v1/namespaces/default/configmaps?fieldSelector=metadata.name%3Deoa-group-config&limit=500&resourceVersion=0: dial tcp 192.168.7.240:6443: connect: connection refused

出现此类问题,大多是没安装监控软件,某个节点出现问题,管理员没有察觉导致,比如OS问题或者磁盘打满问题导致,可以查看系统是否正常,然后重启kubelet解决问题。

systemctl restart kubelet

5、执行apply服务配置不生效

kubectl apply xxx.yaml会检测当前yaml是否有变化,如果修改了服务中其他配置而没有修改yaml,直接apply,那么kubectl会认为没有变化,故配置不能生效,这时要使用kubectl delete/create命令使其生效。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术爱好者社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档