42次9.4(k8s环境安装)

一、前期准备

1.系统环境

k8s-master 192.168.1.11

k8s-node1 192.168.1.22

k8s-node2 192.168.1.33

2.配置主句映射

复制代码
[root@k8s-master ~]# vim /etc/hosts
192.168.1.11    k8s-master
192.168.1.22    k8s-node1
192.168.1.33    k8s-node2
#测试
[root@k8s-master ~]# ping k8s-master

3.master主机配置

复制代码
[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/dockerce/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/dockerce/linux/centos/gpg
​
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/dockerce/linux/centos/gpg
​
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/dockerce/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/dockerce/linux/centos/gpg
​
​
[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]# yum clean all
[root@k8s-master yum.repos.d]# yum makecache

4.安装常用工具

复制代码
yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y
yum -y install ntpdate

5.时间同步

复制代码
[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

6.配置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 

7.安装 k8s 高可用性 Git 仓库

复制代码
[root@k8s-master ~]# git clone https://gitee.com/dukuan/k8s-ha-install.git 

reboot重启

二、配置内核模块

1.配置ipvs模块

复制代码
[root@k8s-master ~]# yum install ipvsadm ipset sysstat conntrack libseccomp -y
[root@k8s-master ~]# modprobe -- ip_vs          # 使⽤ modprobe 命令加载内核模块,核⼼ IPVS 模块。
[root@k8s-master ~]# modprobe -- ip_vs_rr       # IPVS 负载均衡算法 rr
[root@k8s-master ~]# modprobe -- ip_vs_wrr      # IPVS 负载均衡算法 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隧道功能的模块,使得数据可以在两个⽹络之间进⾏传输
[root@k8s-master ~]# systemctl enable --now systemd-modules-load.service    # 开机⾃启systemd默认提供的⽹络管理服务
[root@k8s-master ~]# lsmod | grep -e ip_vs -e nf_conntrack    # 查看已写⼊加载的模块

2.配置 k8s 内核

复制代码
[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    # ⽤于设置系统中最⼤的监听队列的⻓度
[root@k8s-master ~]# lsmod | grep --color=auto -e ip_vs -e nf_conntrack

三、基本组件安装

1.安装containerd

(1)安装docker
复制代码
[root@k8s-master ~]# yum remove -y podman runc containerd   # 卸载之前的containerd
[root@k8s-master ~]# yum install docker-ce docker-ce-cli containerd.io -y   # 安装Docker和containerd
(2)配置 Containerd 所需模块
复制代码
[root@k8s-master ~]# cat <<EOF | sudo tee 
/etc/modules-load.d/containerd.conf
> overlay   # ⽤于⽀持Overlay⽹络⽂件系统的模块,它可以在现有的⽂件系统之上创建叠加层,以实现虚拟化、隔离和管理等功
能。
> br_netfilter    # ⽤于containerd的⽹络过滤模块,它可以对进出容器的⽹络流量进⾏过滤和管理。
> 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
 net.ipv4.ip_forward                 = 1  
 net.bridge.bridge-nf-call-ip6tables = 1
[root@k8s-master ~]# sysctl --system 
(4)Containerd 配置⽂件
复制代码
[root@k8s-master ~]# mkdir /etc/containerd
 [root@k8s-master ~]# containerd config default | tee /etc/containerd/config.toml    # 读取containerd的配置并保存到/etc/containerd/config.toml
[root@k8s-master ~]# vim /etc/containerd/config.toml    # 找到containerd.runtimes.runc.options模块,添加SystemdCgroup = true,如果已经存在则直接修改
[plugins."io.containerd.grpc.v1.cri".containerd.ru
 ntimes.runc.options]
            BinaryName = ""
            CriuImagePath = ""
            CriuPath = ""
            CriuWorkPath = ""
            IoGid = 0
            IoUid = 0
            NoNewKeyring = false
            NoPivotRoot = false
            Root = ""
            ShimCgroup = ""
            SystemdCgroup = false   # 没有就添加,有
的话就修改
# 找到sandbox_image修改为如下参数
​
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
​
[root@k8s-master ~]# systemctl daemon-reload    # 加载systemctl控制脚本
[root@k8s-master ~]# systemctl enable containerd    # 启动containerd并设置开机启动
(5)配置 crictl 客户端连接的运⾏位置
复制代码
[root@k8s-master ~]# vim /etc/crictl.yaml  # 配置容器运⾏环境的crictl.yml⽂件
runtime-endpoint: unix:///run/containerd/containerd.sock # 指定了容器运⾏时的地址
image-endpoint: unix:///run/containerd/containerd.sock   # 指定了镜像运⾏时的地址 
timeout: 10   # 设置了超时时间为10s
debug: false   # 关闭调试模式

2.安装 Kubernetes 组件

安装 Kubeadm、Kubelet 和 Kubectl

复制代码
[root@k8s-master ~]# yum list kubeadm.x86_64 --showduplicates | sort -r    # 查询最新的Kubernetes版本号
[root@k8s-master ~]# yum install kubeadm-1.28* kubelet-1.28* kubectl-1.28* -y  # 安装1.28最新版本kubeadm、kubelet和kubectl
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl enable --now kubelet   # 允许开机⾃启kubelet
[root@k8s-master ~]# kubeadm version    # 查看当前安装的kubeadm版本号

3.Kubernetes 集群初始化

(1)Kubeadm 配置⽂件
复制代码
[root@k8s-master ~]# vim kubeadm-config.yaml    # 修改kubeadm配置⽂件
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: {}   # 使⽤默认的调度器⾏为
​
[root@k8s-master ~]# kubeadm config migrate --old-config kubeadm-config.yaml --new-config new.yaml # 将旧的kubeadm配置⽂件转换为新的格式
(2)下载组件镜像
复制代码
[root@k8s-master ~]# kubeadm config images pull -config /root/new.yaml   # 通过新的配置⽂件new.yaml从指定的阿⾥云仓库拉取kubernetes组件镜像
(3)集群初始化
复制代码
[root@k8s-master ~]# kubeadm init --config /root/new.yaml  --upload-certs
相关推荐
chuanauc3 小时前
Kubernets K8s 学习
java·学习·kubernetes
小张是铁粉3 小时前
docker学习二天之镜像操作与容器操作
学习·docker·容器
烟雨书信3 小时前
Docker文件操作、数据卷、挂载
运维·docker·容器
IT成长日记3 小时前
【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
运维·docker·容器·volume·prune
这儿有一堆花3 小时前
Docker编译环境搭建与开发实战指南
运维·docker·容器
LuckyLay3 小时前
Compose 高级用法详解——AI教你学Docker
运维·docker·容器
Uluoyu3 小时前
redisSearch docker安装
运维·redis·docker·容器
IT成长日记8 小时前
【Docker基础】Docker数据持久化与卷(Volume)介绍
运维·docker·容器·数据持久化·volume·
疯子的模样12 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
虚伪的空想家13 小时前
rook-ceph配置dashboard代理无法访问
ceph·云原生·k8s·存储·rook