Bootstrap

实训day43(9.4)

一、前期准备
1、配置主机映射
[root@k8s-master ~]# vim /etc/hosts

192.168.8.168   k8s-master
192.168.8.176   k8s-node1
192.168.8.177   k8s-node2
[root@k8s-master ~]# ping k8s-master

2、配置yum源
[root@k8s-master yum.repos.d]# vim kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpmpackage-key.gpg
[root@k8s-master yum.repos.d]# vim docker-ce.repo 

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
 
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

3、安装必备工具
[root@k8s-master yum.repos.d]# yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent lvm2 git -y

4、时间同步
[root@k8s-master yum.repos.d]# yum -y install ntpdate

[root@k8s-master yum.repos.d]# ntpdate time2.aliyun.com

[root@k8s-master yum.repos.d]# crontab -e

* 5 * * * /usr/sbin/ntpdate time2.aliyun.com
5、配置limit
[root@k8s-master yum.repos.d]# ulimit -SHn 65535    //单个进程可以打开的⽂件数量将被限制为 65535

[root@k8s-master yum.repos.d]# vim /etc/security/limits.conf

* soft nofile 65536
* hard nofile 131072
* soft nproc 65535
* hard nproc 655350
* soft memlock unlimited
* hard memlock unlimited
6、安装k8s高可用git仓库
[root@k8s-master ~]# cd /root/ ; git clone https://gitee.com/dukuan/k8s-ha-install.git

[root@k8s-master ~]#  yum update -y -- exclude=kernel* --nobest && reboot

二、配置内核模块
1、配置ipvs模块
[root@k8s-master ~]# yum install ipvsadm ipset sysstat conntrack libseccomp -y

[root@k8s-master ~]# modprobe -- ip_vs
[root@k8s-master ~]# modprobe -- ip_vs_rr
[root@k8s-master ~]# modprobe -- ip_vs_wrr
[root@k8s-master ~]# modprobe -- ip_vs_sh
[root@k8s-master ~]# modprobe -- nf_conntrack

[root@k8s-master ~]# vim /etc/modulesload.d/ipvs.conf

# 在系统启动时加载下列 IPVS 和相关功能所需的模块
ip_vs                    # 负载均衡模块
ip_vs_lc            # 用于实现基于连接数量的负载均衡算法
ip_vs_wlc            # 用于实现带权重的最少连接算法的模块
ip_vs_rr            # 负载均衡rr算法模块
ip_vs_wrr            # 负载均衡wrr算法模块
ip_vs_lblc        # 负载均衡算法,它结合了最少连接(LC)算法和基于偏置的轮询(Round Robin with Bias)算法
ip_vs_lblcr        # 用于实现基于链路层拥塞状况的最少连接负载调度算法的模块
ip_vs_dh            # 用于实现基于散列(Hashing)的负载均衡算法的模块
ip_vs_sh            # 用于源端负载均衡的模块
ip_vs_fo            # 用于实现基于本地服务的负载均衡算法的模块
ip_vs_nq            # 用于实现NQ算法的模块
ip_vs_sed            # 用于实现随机早期检测(Random Early Detection)算法的模块
ip_vs_ftp            # 用于实现FTP服务的负载均衡模块
ip_vs_sh
nf_conntrack    # 用于跟踪网络连接的状态的模块
ip_tables            # 用于管理防护墙的机制
ip_set                # 用于创建和管理IP集合的模块
xt_set                # 用于处理IP数据包集合的模块,提供了与iptables等网络工具的接口
ipt_set                # 用于处理iptables规则集合的模块
ipt_rpfilter    # 用于实现路由反向路径过滤的模块
ipt_REJECT        # iptables模块之一,用于将不符合规则的数据包拒绝,并返回特定的错误码
ipip                    # 用于实现IP隧道功能的模块,使得数据可以在两个网络之间进行传输

2、k8s内核模块
[root@k8s-master ~]# yum -y install kubernetes

[root@k8s-master ~]# vim /etc/sysctl.d/k8s.conf

# 写⼊k8s所需内核模块
net.bridge.bridge-nf-call-iptables = 1 # 控制⽹络桥接与iptables之间的⽹络转发⾏为
net.bridge.bridge-nf-call-ip6tables = 1 # ⽤于控制⽹络桥接(bridge)的IP6tables过滤规则。当该参数设置为1时,表示启⽤对⽹络桥接的IP6tables过滤规则
fs.may_detach_mounts = 1 # ⽤于控制⽂件系统是否允许分离挂载,1表示允许
net.ipv4.conf.all.route_localnet = 1 # 允许本地⽹络上的路由。设置为1表示允许,设置为0表示禁⽌。
vm.overcommit_memory=1 # 控制内存分配策略。设置为1表示允许内存过量分配,设置为0表示不允许。
vm.panic_on_oom=0 # 决定当系统遇到内存不⾜(OOM)时是否产⽣panic。设置为0表示不产⽣panic,设置为1表示产⽣panic。
fs.inotify.max_user_watches=89100 # inotify可以监视的⽂件和⽬录的最⼤数量。
fs.file-max=52706963 # 系统级别的⽂件描述符的最⼤数量。
fs.nr_open=52706963 # 单个进程可以打开的⽂件描述符的最⼤数量。
net.netfilter.nf_conntrack_max=2310720 # ⽹络连接跟踪表的最⼤⼤⼩。
net.ipv4.tcp_keepalive_time = 600 # TCP保活机制发送探测包的间隔时间(秒)。
net.ipv4.tcp_keepalive_probes = 3 # TCP保活机制发送探测包的最⼤次数。
net.ipv4.tcp_keepalive_intvl =15 # TCP保活机制在发送下⼀个探测包之前等待响应的时间(秒)。
net.ipv4.tcp_max_tw_buckets = 36000 # TCP TIME_WAIT状态的bucket数量。
net.ipv4.tcp_tw_reuse = 1 # 允许重⽤TIME_WAIT套接字。设置为1表示允许,设置为0表示不允许。
net.ipv4.tcp_max_orphans = 327680 # 系统中最⼤的孤套接字数量。
net.ipv4.tcp_orphan_retries = 3 # 系统尝试重新分配孤套接字的次数。
net.ipv4.tcp_syncookies = 1 # ⽤于防⽌SYN洪⽔攻击。设置为1表示启⽤SYN cookies,设置为0表示禁⽤。
net.ipv4.tcp_max_syn_backlog = 16384 # SYN连接请求队列的最⼤⻓度。
net.ipv4.ip_conntrack_max = 65536 # IP连接跟踪表的最⼤⼤⼩。
net.ipv4.tcp_max_syn_backlog = 16384 # 系统中最⼤的监听队列的⻓度。net.ipv4.tcp_timestamps = 0 # ⽤于关闭TCP时间戳选项。
net.core.somaxconn = 16384 # ⽤于设置系统中最⼤的监听队列的⻓度

三、基本组件安装
1、安装docker
[root@k8s-master ~]# yum remove -y podman runc containerd   //卸载旧版本
[root@k8s-master ~]# yum install containerd.io -y

[root@k8s-master ~]# yum list installed | grep docker

[root@k8s-master ~]# yum list | grep docker-ce

[root@k8s-master ~]# yum -y remove docker
[root@k8s-master ~]# yum install docker-ce docker-ce-cli -y

2、配置 Containerd 所需模块
[root@k8s-master ~]# cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
> overlay
> br_netfilter
> EOF
overlay
br_netfilter
[root@k8s-master ~]# modprobe -- overlay
[root@k8s-master ~]# modprobe -- br_netfilter

3、配置 Containerd 所需内核
[root@k8s-master ~]# vim /etc/sysctl.d/99-kubernetes-cri.conf

 net.bridge.bridge-nf-call-iptables  = 1 # ⽤于控制⽹络桥接是否调⽤iptables进⾏包过滤和转发。
 net.ipv4.ip_forward                 = 1 # 路由转发,1为开启
 net.bridge.bridge-nf-call-ip6tables = 1 # 控制是否在桥接接⼝上调⽤IPv6的iptables进⾏数据包过滤和转发。
[root@k8s-master ~]# sysctl --system

4、Containerd 配置⽂件
[root@k8s-master ~]# mkdir -p /etc/containerd
[root@k8s-master ~]# containerd config default | tee /etc/containerd/config.toml

[root@k8s-master ~]# vim /etc/containerd/config.toml 

128             sandbox_image = "registry.cn-hangzhou.aliyuncs.co    m/google_containers/pause:3.9"
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl start containerd.service 
[root@k8s-master ~]# systemctl enable containerd.service 

5、配置crictl客户端连接的运行方式
[root@k8s-master ~]# vim /etc/crictl.yaml

 runtime-endpoint: unix:///run/containerd/containerd.sock
 image-endpoint: unix:///run/containerd/containerd.sock
 timeout: 10 
 debug: false  
6、安装kubernetes组件
[root@k8s-master ~]# yum list kubeadm.x86_64 -- showduplicates | sort -r

[root@k8s-master ~]# yum install kubeadm-1.28* kubelet-1.28* kubectl-1.28* -y

Transaction check error:
  file /usr/bin/kubectl from install of kubectl-1.28.2-0.x86_64 conflicts with file from package kubernetes-client-1.5.2-0.7.git269f928.el7.x86_64

错误概要
-------------

[root@k8s-master ~]# systemctl start kubelet.service
[root@k8s-master ~]# systemctl enable kubelet.service

[root@k8s-master ~]# yum -y remove kubernetes-client-1.5.2-0.7.git269f928.el7.x86_64
[root@k8s-master ~]# yum install kubeadm-1.28*  kubectl-1.28* -y

7、Kubernetes 集群初始化
1. Kubeadm 配置⽂件
[root@k8s-master ~]# vim kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3              # 指定Kubernetes配置文件的版本,使用的是kubeadm API的v1beta3版本
bootstrapTokens:                # 定义bootstrap tokens的信息。这些tokens用于在Kubernetes集群初始化过程中进行身份验证
- groups:               # 定义了与此token关联的组
  - system:bootstrappers:kubeadm:default-node-token 
  token: 7t2weq.bjbawausm0jaxury                # bootstrap token的值
  ttl: 24h0m0s          # token的生存时间,这里设置为24小时
  usages:                       # 定义token的用途
  - signing             # 数字签名
  - authentication              # 身份验证
kind: InitConfiguration         # 指定配置对象的类型,InitConfiguration:表示这是一个初始化配置
localAPIEndpoint:               # 定义本地API端点的地址和端口
  advertiseAddress: 192.168.15.11
  bindPort: 6443
nodeRegistration:               # 定义节点注册时的配置
  criSocket: unix:///var/run/containerd/containerd.sock         # 容器运行时(CRI)的套接字路径
  name: k8s-master              # 节点的名称
  taints:               # 标记
  - effect: NoSchedule          # 免调度节点
    key: node-role.kubernetes.io/control-plane          # 该节点为控制节点
---
apiServer:              # 定义了API服务器的配置
  certSANs:             # 为API服务器指定了附加的证书主体名称(SAN),指定IP即可
  - 192.168.15.11
  timeoutForControlPlane: 4m0s          # 控制平面的超时时间,这里设置为4分钟
apiVersion: kubeadm.k8s.io/v1beta3              # 指定API Server版本
certificatesDir: /etc/kubernetes/pki    # 指定了证书的存储目录
clusterName: kubernetes         # 定义了集群的名称为"kubernetes"
controlPlaneEndpoint: 192.168.15.11:6443                # 定义了控制节点的地址和端口
controllerManager: {}           # 控制器管理器的配置,为空表示使用默认配置
etcd:           # 定义了etcd的配置
  local:                # 本地etcd实例
    dataDir: /var/lib/etcd              # 数据目录
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers            # 指定了Kubernetes使用的镜像仓库的地址,阿里云的镜像仓库。
kind: ClusterConfiguration              # 指定了配置对象的类型,ClusterConfiguration:表示这是一个集群配置
kubernetesVersion: v1.28.2              # 指定了kubernetes的版本
networking:             # 定义了kubernetes集群网络设置
  dnsDomain: cluster.local              # 定义了集群的DNS域为:cluster.local
  podSubnet: 172.16.0.0/16              # 定义了Pod的子网
  serviceSubnet: 10.96.0.0/16   # 定义了服务的子网
scheduler: {}           # 使用默认的调度器行为

2. 下载组件镜像
[root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml
[root@k8s-master ~]# ls


[root@k8s-master ~]# kubeadm config images pull --config /root/new.yaml

;