安装前置环境

使用的系统:CentOS Linux release 7.9.2009 (Core) 使用root用户

准备了两台机器:192.168.137.220 作为master,192.168.137.221 作为node1.

  1. 关闭swap交换区

    打开 /etc/fstab 注释掉 swap行,重启系统  ==> 临时关闭是:swapoff -a
    可通过 free -m查看swap的状态
    
  2. 禁用SELinux

    打开 /etc/sysconfig/selinux,将SELINUX=enforcing修改为SELINUX=disabled,重启系统
    ==> 临时关闭 setenforce 0
    
  3. 关闭firewalld

    systemctl disable firewalld
    systemctl stop firewalld
    
  4. 安装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信息。
    
  5. 启用 bridge-nf-call-iptables

    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    
  6. 需要2个cpu core,2G的内存,不然kubeadm init是会报错。

  7. 修改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
    

    centos7修改hostname详细

开始安装kubernetes

kubernetes版本为1.22.0

  1. 配置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
    
  2. 安装kubelet、kubeadm和kubectl

    yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    
  3. 启动kubelet服务

    kubeadm将使用kubelet服务以容器的方式部署和启动Kubernetes的主要服务,所以需要先启动kubelet服务。

    systemctl enable kubelet & systemctl start kubelet
    

    此时kubelet的状态,还是启动失败,通过journalctl -xeu kubelet能看到error信息;只有当执行了kubeadm init后才会启动成功。

  4. 获取配置,拉取相关镜像

    拉取默认的配置

    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
  1. 运行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-apiserveretcd容器启动失败。

    再次通过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
    
  2. 安装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

  1. 安装网络插件
  # 安装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
  1. 验证k8s集群是否安装完成

    执行kubectl get pods --all-namespaces看pod状态是否都正确

    如果发现错误状态的pod,可以执行*kubectl --namespace=kube-system describe pod <pod_name>*来查看错误原因。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐