k8s安装步骤(1.22.0版本)
安装前置环境使用的系统:CentOS Linux release 7.9.2009 (Core)使用root用户准备了两台机器:192.168.137.220 作为master,192.168.137.221 作为node1.关闭swap交换区打开 /etc/fstab 注释掉 swap行,重启系统==> 临时关闭是:swapoff -a可通过 free -m查看swap的状态禁用SELin
安装前置环境
使用的系统:CentOS Linux release 7.9.2009 (Core) 使用root用户
准备了两台机器:192.168.137.220 作为master,192.168.137.221 作为node1.
-
关闭swap交换区
打开 /etc/fstab 注释掉 swap行,重启系统 ==> 临时关闭是:swapoff -a 可通过 free -m查看swap的状态
-
禁用SELinux
打开 /etc/sysconfig/selinux,将SELINUX=enforcing修改为SELINUX=disabled,重启系统 ==> 临时关闭 setenforce 0
-
关闭firewalld
systemctl disable firewalld systemctl stop firewalld
-
安装docker,并且启动docker,配置cgroupdriver为systemd
设置docker随机启动:systemctl enable docker & systemctl start docker; 打开或新增 /etc/docker/daemon.json, 增加配置: "exec-opts": ["native.cgroupdriver=systemd"] 如果不配置这个会导致后面安装的kubelet服务启动不了,可以通过journalctl -xeu kubelet能看到error信息。
-
启用
bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
-
需要2个cpu core,2G的内存,不然kubeadm init是会报错。
-
修改hostname和域名映射,修改hostname需要重启系统。
# 查看当前的hostname hostname 或hostnamectl # 修改hostname hostnamectl set-hostname k8s-master # master节点的主机名 hostnamectl set-hostname k8s-node1 # node1节点的主机名 # 在两台机器上打开/etc/hosts加入 192.168.137.220 k8s-master kube-apiserver 192.168.137.221 k8s-node1
开始安装kubernetes
kubernetes版本为1.22.0
-
配置yum源
在/etc/yum.repos.d/kubernetes.repo增加以下内容:
[kubernetes] name=Kubernetes Repository 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=kubelet kubeadm kubectl
如果无法访问官方的yum源,可以使用国内的yum源,比如:http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
更新yum软件源缓存
yum makecache fast
-
安装kubelet、kubeadm和kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
-
启动kubelet服务
kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。
systemctl enable kubelet & systemctl start kubelet
此时kubelet的状态,还是启动失败,通过journalctl -xeu kubelet能看到error信息;只有当执行了kubeadm init后才会启动成功。
-
获取配置,拉取相关镜像
拉取默认的配置
kubeadm config print init-defaults > init-config.yaml
打开该文件查看,发现配置的镜像仓库如下:
imageRepository: k8s.gcr.io
该镜像仓库如果连不上,可以用国内的镜像代替:imageRepository: registry.aliyuncs.com/google_containers
打开init-config.yaml,然后进行相应的修改,可以指定kubernetesVersion版本,pod的选址访问等。
kubernetes镜像拉取:
kubeadm config images pull --config=init-config.yaml
采用国内镜像的方案,由于coredns的标签问题,会导致拉取coredns:v1.8.4拉取失败,这时候我们可以手动拉取,并自己打标签。失败信息如下:
从docker hub上手动拉取镜像:
docker pull registry.aliyuncs.com/google_containers/coredns:1.8.4
以下是镜像默认的标签:v1.8.4 ,而在镜像中的标签是1.8.4,所以会导致拉取失败。
修改标签:
# 重命名
docker tag registry.aliyuncs.com/google_containers/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
# 删除原有镜像
docker rmi registry.aliyuncs.com/google_containers/coredns:1.8.4
-
运行kubeadm init安装master节点
#kubeadm init --config=init-config.yaml #采用此方式还需要改advertiseAddress等信息否则会出现以下安装失败,etcd网络问题,故采用以下方式 kubeadm init --apiserver-advertise-address 192.168.137.220 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --kubernetes-version=1.22.0 --image-repository registry.aliyuncs.com/google_containers
安装失败信息如下:
通过docker ps -a | grep kube | grep -v pause 发现kube-apiserver 和 etcd容器启动失败。
再次通过docker logs ** 发现etcd启动失败,是因为listen tcp 1.2.3.4:2380: bind: cannot assign requested address。
kube-apiserver启动失败是因为 etcd失败造成的。
kubeadm init安装失败后需要重新执行,此时要先执行kubeadm reset命令。
当出现以下内容时,安装成功:
按照以上成功的提示,执行命令,创建相关的**.kube文件夹和复制配置信息**。
当加入node节点时,需要查看token,可以执行以下指令:
kubeadm token list
当token过期时,可以创建新的永久token:
kubeadm token create --ttl 0 #创建永久的token # 获取ca证书sha256编码hash值 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'2cc3029123db737f234186636330e87b5510c173c669f513a9c0e0da395515b0 # node 节点加入 kubeadm join 10.167.11.153:6443 --token o4avtg.65ji6b778nyacw68 --discovery-token-ca-cert-hash sha256:2cc3029123db737f234186636330e87b5510c173c669f513a9c0e0da395515b0
-
安装node节点
- node节点所在的机器也要按照前置环境的步骤走一遍
- 安装像master那样增加kubernetes的yum源
- 由于网络问题,也要按照master中的手动来取coredns的方式走一遍
安装kubelet和kubeadm:
yum install kubelet kubeadm --disableexcludes=kubernetes
运行以下命令,并设置开机启动:
systemctl enable docker && systemctl start docker systemctl enable kubelet && systemctl start kubelet
执行join命令:
# 该命令来自master安装成功后的最后两行信息 kubeadm join 192.168.137.220:6443 --token c32t70.x1atw35sha5mrnvc \ --discovery-token-ca-cert-hash sha256:e053a0c73fbf74d5486784ef828650fe9cd9db95d3f6228832faee88fb8b199a
此时,在master节点上执行kubectl get nodes能看到该node节点表示成功,此时状态还是NOT Ready。
- 安装网络插件
# 安装Calico CNI插件
kubectl apply -f "https://docs.projectcalico.org/manifests/calico.yaml"
# 安装weave插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
安装成功后,再通过kubectl get nodes看到状态已经是Ready。
附:删除工作节点:
kubectl delete nodes k8s-node1
-
验证k8s集群是否安装完成
执行kubectl get pods --all-namespaces看pod状态是否都正确
如果发现错误状态的pod,可以执行*kubectl --namespace=kube-system describe pod <pod_name>*来查看错误原因。
更多推荐
所有评论(0)