阿里云Centos7 安装 k8s 集群(使用过程中的坑)

本文详细记录了Kubernetes集群的搭建过程,包括CentOS环境下k8s的安装配置,以及在集群资源对象创建过程中遇到的Pod服务ContainerCreating状态问题的排查与解决方法。针对拉取镜像失败的ErrImagePull错误,提供了详细的步骤,从检查证书文件到安装rhsm组件,确保集群稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人备忘

下面这个地址能满足大部分需求 :

无坑版本 k8s centos 安装博文

这个k8s集群部署讲解的很细,还有别的博文做扩展

上文:5.2 的配置三台服务器都要修改 ,5.3 的命令 [root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }' 只在主节点执行就行。

补充 : 10.0.0.0/16 网段开的比较大,正常该处配置项应该和 vim /etc/kubernetes/apiserver 这个中的10.254.0.0/16 保持一致,自行挑选。

 

访问http://kube-apiserver:port

http://192.168.234.130:8080/        查看所有请求url

http://192.168.234.130:8080/healthz/ping      查看健康状况

 

补充:阿里云服务器记得开防火墙(安全组)2378,6443,10250,4001

 

 注意: 如果你改变了 api-server 中的默认8080 端口,则在使用 kubectl 命令时 会出现,couldn't read version from server: get http://localhost:8080/version: dial tcp 127.0.0.1:8080: connection refused. 

方法一: alias kubectl=" kubectl -s http://apiserver:8080" , 用改命令重新指定默认地址。

方法二:ubectl -s http://k8s-master:8081 get nodes , 加入 -s http://ip:port 指定到你设置的 端口。

 

 

etcd centos 集群配置该片博文可参考

 

坑一:

kubernetes创建集群资源对象, pod服务一直处于ContainerCreating状态问题。
failed to “StartContainer” for “POD” with ErrImagePull

1.查看pods状态,一直处于ContainerCreating状态

 

1

2

3

[root@SZ-V-L-K8S ~]# kubectl get pods

NAME        READY    STATUS              RESTARTS  AGE

nginx-pod  0/1      ContainerCreating  0          15h

 

2.查看pod资源的详细信息中的错信息提示
[root@SZ-V-L-K8S ~]# kubectl describe pod nginx-pod

 

1

2

3

4

Events:

  FirstSeen    LastSeen    Count    From            SubObjectPath    Type        Reason        Message

  ---------    --------    -----    ----            -------------    --------    ------        -------

  15h        4m        180    {kubelet srv.node1}            Warning        FailedSync    Error syncing pod, skipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request.  details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"

 

3.错误分析
错误提示: failed to “StartContainer” for “POD” with ErrImagePull: “image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)”

大概出错意图是,srv.node1这个节点机,拉取Docker镜像的时候出错了,因为redhat-ca.crt这个证书文件不存在。

到srv.node1节点主机,手动执行拉取镜像试一下。

 

1

2

3

[root@SZ-V-L-docker-node1 ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...

open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

错误信息一样的,查看下redhat-ca.crt这个证书文件目录是否存在

 

1

2

[root@SZ-V-L-docker-node1  ~]# ls -l /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt

lrwxrwxrwx. 1 root root 27 Apr 18 16:05 /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt -> /etc/rhsm/ca/redhat-uep.pem

是个软件链接到/etc/rhsm/ca/redhat-uep.pem这个文件,而且这个文件目录不存在。
问题找到了。

4.错误解决
跟rhsm这个有关,全称Red Hat Subscription Manager。 跟RedHat查关服务,直接用yum安装下rhsm相关的组件。

 

1

2

3

4

5

[root@SZ-V-L-docker-node1  ~]# yum install *rhsm*

Downloading packages:

(1/3): python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm                                                                                                              |  41 kB  00:00:00    

(2/3): python-dateutil-1.5-7.el7.noarch.rpm                                                                                                                             |  85 kB  00:00:01    

(3/3): python-rhsm-1.19.10-1.el7_4.x86_64.rpm        

 

再手动执行拉取镜像文件,现在可以拉取镜像文件了,问题解决。

 

1

2

3

4

[root@SZ-V-L-docker-node1  ~]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...

latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure

26e5ed6899db: Downloading [=>                                                ] 2.107 MB/74.87 MB

 

5.重新集群资源对象
返回到master主节点,删除集群资源对象再重新创建。

1

2

3

4

5

6

7

8

9

10

11

12

13

[root@ZSZ-V-L-K8S ~]# kubectl delete pod nginx-pod

 

[root@SZ-V-L-K8S ~]# kubectl get pods

No resources found.

 

[root@SZ-V-L-K8S ~]# kubectl create -f /data/app/docker_nginx/nginx-pod.yaml

6.重还有一种情况

我们node 上有/etc/rhsm/ca/ 目录, 但是没有 redhat-uep.pem 文件,这时候需要我们执行两个命令:

(1)wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm

(2)rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

这两个命令会生成/etc/rhsm/ca/redhat-uep.pem文件.

顺得的话会得到下面的结果。

[root@localhost]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...

latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure

26e5ed6899db: Pull complete

此时在,删除原来的pod , 重新 kubectl create -f xxx.yaml ,再次查看pods 的状态,发现 该pod 为 Running.

 

 

 

### 在 CentOS 9 上部署 Kubernetes 集群 尽管大多数文档和教程都基于较早版本的 CentOS(如 CentOS 7 或 8),但在 CentOS 9 上部署 Kubernetes 集群也是可行的。以下是详细的说明: #### 系统准备 在开始之前,确保所有节点已正确配置并满足以下条件: - 所有节点的操作系统均为 CentOS 9。 - 节点之间的网络通信正常。 - 已关闭 `SELinux` 和防火墙以减少干扰。 关闭 `SELinux` 的方法如下: ```bash setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config ``` 禁用交换分区 (`swap`) 是必要的,因为 Kubernetes 默认不支持启用 swap 的环境: ```bash swapoff -a && sysctl vm.swappiness=0 ``` 为了防止重启后恢复 swap,需修改 `/etc/fstab` 文件,注释掉涉及 swap 的行[^4]。 #### 安装 Docker 或其他容器运行时 Kubernetes 使用容器运行时来启动 Pod 中的容器,默认推荐使用 Docker。对于 CentOS 9,建议安装最新稳定版的 containerd 或 cri-o 来替代 Docker,因其更轻量且兼容性更好。 安装 containerd 的步骤如下: ```bash yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y containerd.io mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml >/dev/null 2>&1 systemctl restart containerd systemctl enable containerd ``` #### 添加 Kubernetes YUM 源 创建一个新的仓库文件用于存储 Kubernetes 的软件包信息: ```bash cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF ``` 注意:如果国内访问速度慢,可替换为阿里云镜像源[^3]: ```bash baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 ``` 更新缓存并安装所需组件: ```bash yum makecache fast yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable --now kubelet ``` #### 初始化主节点 初始化主节点时需要指定一些参数,例如 CRI 插件路径、Pod 子网范围等: ```bash kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=/run/containerd/containerd.sock ``` 完成后,根据提示完成后续设置,包括复制管理员证书到默认目录以及加载 `kubectl` 命令上下文: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` #### 加入工作节点 获取加入令牌命令通常会在主节点初始化成功后显示出来;如果没有保存,则可以通过以下方式重新生成: ```bash kubeadm token create --print-join-command ``` 将此命令复制粘贴至各从节点执行即可完成注册过程[^1]。 #### 配置网络插件 Flannel 是一种常用的 overlay 网络解决方案,适用于小型集群测试场景。安装 Flannel 并激活它作为 pod 网络平面的一部分: ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` --- ### 注意事项 由于 CentOS 9 属于较新的发行版,在某些情况下可能会遇到与现有官方文档不符的情况,请及时查阅社区反馈或调整依赖关系解决冲突问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值