Kubernate · 2023年4月12日

Kubernetes-创建Node

一、node 机器上操作

0、修改hostname

vim /etc/hostname

总参考: https://www.jianshu.com/p/d27141e18398

1、安装 docker

yum install -y epel-release
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce

参考: https://blog.csdn.net/qq_25760623/article/details/88657491

2、启动 docker

systemctl enable docker && systemctl start docker
docker info

3、更改 k8s 的 yum 源

vim /etc/yum.repos.d/k8s.repo
[k8s]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

4、安装 k8s

yum install -y kubelet kubeadm
systemctl enable kubelet  && systemctl start kubelet

5、更换 docker 镜像

for i in `kubeadm config images list`; do
    imageName=${i#k8s.gcr.io/}
  docker pull registry.aliyuncs.com/google_containers/$imageName
  docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
  docker rmi registry.aliyuncs.com/google_containers/$imageName
done;

6、开机启动和启动 kubelet

systemctl enable kubelet && systemctl start kubelet

7、开通相应端口

yum install -y firewalld
systemctl start firewalld.service
// 6443
firewall-cmd --zone=public --add-port=6443/tcp --permanent && firewall-cmd --reload
// 10250
firewall-cmd --zone=public --add-port=10250/tcp --permanent && firewall-cmd --reload

参考: https://www.jianshu.com/p/a2eebf4cd6a9

二、master机器上操作

1、创建token

kubeadm token create

2、列出token

kubeadm token list

3、 openssl

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

三、node机器上操作

1、加入集群(token和密钥是master上生成的!)

kubeadm join 10.30.37.72:6443 --token g49to4.nlgv3j4vig4pdbvi --discovery-token-ca-cert-hash sha256:10f49c081bbd389182ca990ef5f5aa869f767b2a89adaf5165abeabae7ae61fb

四、错误解决

1、报错:

[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists

解决:

kubeadm reset

参考:

https://blog.csdn.net/qianghaohao/article/details/82624920

2、报错

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

解决:

mkdir -p /etc/docker
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
# Restart Docker
systemctl daemon-reload
systemctl restart docker

参考:

https://blog.csdn.net/qq_23598037/article/details/100177519

3、报错(真正解决问题)

error execution phase kubelet-start: cannot get Node "node1": nodes "node1" is forbidden: User "system:bootstrap:g49to4" cannot get resource "nodes" in API group "" at the cluster scope

解决:

yum remove -y kubelet kubeadm
yum install -y kubelet-1.17.2-0
yum install -y kubeadm-1.17.2-0

参考:

https://blog.csdn.net/sinat_35534641/article/details/82808228

参考也没和报错一一对应,但是它提醒了我,join失败,可能是版本不匹配导致的。