一、准备工作

1、修改初始环境,修改机器IP

PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #static表示静态ip地址
ONBOOT=yes    #开机自启动网络,必须是yes
IPADDR=192.168.40.180   #ip地址,需要跟自己电脑所在网段一致
NETMASK=255.255.255.0  #子网掩码,需要跟自己电脑所在网段一致
GATEWAY=192.168.1.2   #网关,在自己电脑打开cmd,输入ipconfig /all可看到
DNS1=192.168.1.2    #DNS,在自己电脑打开cmd,输入ipconfig /all可看到 
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes

2、关闭防火墙和selinux

[root@master ~]# systemctl stop firewalld ; systemctl disable firewalld
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3、配置主机名,多台主机名都进行修改

[root@master ~]# hostnamectl set-hostname 主机名 && bash 

4、关闭交换分区swap

[root@master ~]# vim /etc/fstab  #将下行注释掉
#/dev/mapper/centos-swap swap      swap    defaults        0 0

5、修改机器内核参数,所有都修改

[root@master ~]# modprobe br_netfilter
[root@master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
[root@master ~]# sysctl -p /etc/sysctl.d/k8s.conf

6、配置国内repo源

[root@master ~]# yum install yum-utils -y
​
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
[root@master ~]# cat >  /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF

7、配置时间同步

[root@master ~]# yum install ntpdate -y #安装ntpdate命令
[root@master ~]# ntpdate cn.pool.ntp.org #跟网络时间做同步
[root@master ~]# crontab -e #把时间同步做成计划任务
* *  * * * /usr/sbin/ntpdate   cn.pool.ntp.org
[root@master ~]# service crond restart #重启crond服务

8、安装基础包

[root@master ~]# yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack telnet ipvsadm

9、安装containerd

[root@master ~]# yum install  containerd.io-1.6.6 -y
[root@master ~]# mkdir -p /etc/containerd
#生成配置文件
[root@master ~]# containerd config default > /etc/containerd/config.toml
#修改配置文件
打开/etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
#设置开机自启动
[root@master ~]# systemctl enable containerd  --now

10、修改/etc/crictl.yaml文件

[root@master1 ~]#cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
[root@master1 ~]#systemctl restart  containerd

11、配置镜像加速器

配置containerd镜像加速器,k8s所有节点均按照以下配置:
编辑vim /etc/containerd/config.toml文件
找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
​
[root@master ~]# mkdir /etc/containerd/certs.d/docker.io/ -p
[root@master ~]# vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.docker-cn.com"]
  capabilities = ["pull"]
​
#重启containerd:
[root@master ~]# systemctl restart containerd

12、安装docker,docker与containerd不冲突,docker的目的只为了构建dockerfile镜像

[root@master1 ~]# yum install  docker-ce  -y
[root@master1 ~]# systemctl enable docker --now

13、配置docker加速器

[root@master1 ~]# vim /etc/docker/daemon.json
#写入如下内容:
{
 "registry-mirrors":["https://vh3bm52y.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"]
} 
#重启docker
systemctl restart docker

14、安装k8s初始化需要的软件包

1.3、安装初始化k8s需要的软件包
[root@master1 ~]# yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
[root@master1 ~]# systemctl enable kubelet

15、kubeadm初始化k8s集群

#设置容器运行时
[root@master1~]# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
#使用kubeadm初始化k8s集群
[root@master1 ~]# kubeadm config print init-defaults > kubeadm.yam
#修改kubeadm.yaml配置文件
localAPIEndpoint:
  advertiseAddress: 192.168.40.180 #控制节点的ip
 networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
  
#在文件最后,插入以下内容,(复制时,要带着---):
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
​
#基于kubeadm.yaml初始化k8s集群
[root@master1 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz
#ctr是containerd自带的工具,有命名空间的概念,若是k8s相关的镜像,都默认在k8s.io这个命名空间,所以导入镜像时需要指定命令空间为k8s.io
#使用ctr命令指定命名空间导入镜像
ctr -n=k8s.io images import k8s_1.26.0.tar.gz
#查看镜像,可以看到可以查询到了
crictl images
​
#根据配置文件初始化
[root@master1 ~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification
​
#配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理
[root@master1 ~]# mkdir -p $HOME/.kube
[root@master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
​
[root@master1 ~]# kubectl get nodes

二、1、添加k8s工作节点

[root@master1 ~]# kubeadm token create --print-join-command  #在master上执行
显示如下:
kubeadm join 192.168.6.110:6443 --token vulvta.9ns7da3saibv4pg1     --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a
#在node节点执行master返回值,需要添加一个参数
kubeadm join 192.168.6.110:6443 --token vulvta.9ns7da3saibv4pg1     --discovery-token-ca-cert-hash sha256:72a0896e27521244850b8f1c3b600087292c2d10f2565adb56381f1f4ba7057a --ignore-preflight-errors=SystemVerification
#返回this node has joined the cluster即成功加入集群

2、为节点打标签

[root@master1 ~]# kubectl label nodes node1 node-role.kubernetes.io/work=work

3、安装kubernets网络组件--CALICO

#安装calico镜像
[root@master1 ~]# ctr -n=k8s.io images import calico.tar.gz
#在线下载配置文件
wget -v https://docs.projectcalico.org/manifests/calico.yaml
#使用配置文件安装calico网络插件
[root@master1 ~]# kubectl apply -f  calico.yaml

4、测试k8s创建pod是否可以正常访问网络

#上传busybox-1-28.tar.gz上传到node1节点
[root@node1 ~]# ctr -n k8s.io images import busybox-1-28.tar.gz
​
[root@master1 ~]# kubectl run busybox --image docker.io/library/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
​
/# ping www.baidu.com  #能访问网络说明插件正常

5、ctr和crictl区别

(1)部署k8s的过程中,经常要对镜像进行操作(拉取、删除、查看等),使用过程中会发现ctr和crictl有很多相同功能

  1. ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互;

  2. ctr和crictl命令具体区别如下,也可以--help查看。crictl缺少对具体镜像的管理能力,可能是k8s层面镜像管理可以由用户自行控制,能配置pod里面容器的统一镜像仓库,镜像的管理可以有habor等插件进行处理。

三、添加新节点

1、添加控制节点master2

  1. 将master1的证书拷贝到master2上

    #masster2创建证书目录
    [root@master2 ~]# cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/
    #把master1节点的证书拷贝到master2上:
    [root@master1 ~]# scp /etc/kubernetes/pki/ca.crt master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/ca.key master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/sa.key master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/sa.pub master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.crt master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/front-proxy-ca.key master2:/etc/kubernetes/pki/
    [root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.crt master2:/etc/kubernetes/pki/etcd/
    [root@master1 ~]# scp /etc/kubernetes/pki/etcd/ca.key master2:/etc/kubernetes/pki/etcd/

  2. 创建目录并有给权限

    [root@xianchaomaster2 ~]# mkdir -p $HOME/.kube
    [root@xianchaomaster2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@xianchaomaster2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

  3. 安装calico镜像,calico.tar.gz传到master1和node节点

    [root@master2 ~]# ctr -n=k8s.io images import k8s_1.26.0.tar.gz
    [root@master2 ~]# ctr -n=k8s.io images import calico.tar.gz

  4. 检查 kubeadm-config ConfigMap 是否正确配置了 controlPlaneEndpoint。可以使用 kubectl 命令获取 kubeadm-config ConfigMap 的信息

    [root@master1 ~]#kubectl -n kube-system edit cm kubeadm-config -o yaml
    添加如下字段:
    controlPlaneEndpoint: "master_IP:6443"
    重启kubelet:
    [root@master1 ~]# systemctl restart kubelet

  5. 在master1上查看加入节点命令

    [root@master1 ~]# kubeadm token create --print-join-command
    显示如下:
    kubeadm join 192.168.40.180:6443 --token zwzcks.u4jd8lj56wpckcwv \
        --discovery-token-ca-cert-hash sha256:1ba1b274090f1f429b18a064cb728 

  6. 在master2上执行加入命令,最后添加控制节点字段

    [root@master2 ~]#kubeadm join 192.168.40.180:6443 --token zwzcks.u4jd8lj56wpckcwv --discovery-token-ca-cert-hash sha256:1ba1b274090feecfef58ed28  \
    --control-plane --ignore-preflight-errors=SystemVerification

  7. 查看查询Pod是否正常

    [root@master2 ~]# kubectl  get pods -n kube-system

  8. kubeadm初始化k8s证书过期解决方案

    查看证书有效时间:
    openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text  |grep Not
    openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text  |grep Not
    ​
    延长证书过期时间
    1.把update-kubeadm-cert.sh文件上传到xianchaomaster1节点
    2.在xianchaomaster1上执行如下:
    1)给update-kubeadm-cert.sh证书授权可执行权限
    [root@master1~]#chmod +x update-kubeadm-cert.sh
    2)执行下面命令,修改证书过期时间,把时间延长到10年
    [root@master1~]# ./update-kubeadm-cert.sh all
    3)在master1节点查询Pod是否正常,能查询出数据说明证书签发完成
    [root@master1~]# kubectl  get pods -n kube-system   
    4)再次查看证书有效期,可以看到会延长到10年
    [root@master1~]# openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text  |grep Not
    [root@master1~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text  |grep Not

Logo

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

更多推荐