42次9.4(k8s环境安装)

ops/2024/12/21 23:01:30/

一、前期准备

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_shnf_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.confnet.bridge.bridge-nf-call-iptables  = 1net.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.runtimes.runc.options]BinaryName = ""CriuImagePath = ""CriuPath = ""CriuWorkPath = ""IoGid = 0IoUid = 0NoNewKeyring = falseNoPivotRoot = falseRoot = ""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.11bindPort: 6443nodeRegistration:   # 定义节点注册时的配置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.11timeoutForControlPlane: 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.localpodSubnet: 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


http://www.ppmy.cn/ops/107916.html

相关文章

flutter的入口和原生交互

从今天起&#xff0c;笔者要开始从flutter列表页面向原生页面跳转了 首先遇到了N个No such module "Flutter" 因为笔者的公司其实是从前往后改造Flutter的&#xff0c;所以也不需要引擎组&#xff0c;但是笔者搞不懂&#xff0c;只能照着葫芦画瓢&#xff0c;以后等…

Apple “Glowtime”活动:iPhone 16、Apple Intelligence亮相

苹果公司即将在9月9日&#xff08;下周一&#xff09;举行的“Its Glowtime”活动中发布备受期待的iPhone 16系列。此次活动不仅是发布新iPhone的场合&#xff0c;也预示着苹果公司将推出一系列新的硬件产品&#xff0c;包括Apple Intelligence、Apple Watch Series 10/Ultra 3…

CSS实现DIV水平展示

CSS实现DIV水平展示 css代码 .container {display: flex; /* 使用 Flexbox */justify-content: space-between; /* 在主轴上均匀排列 */width: 100%; /* 设置容器宽度 */ } .box {flex:1; height:100px; }HTML代码 <div class"container"><div class&quo…

香港服务器支持PHP吗?还支持哪些语言?

香港服务器普遍支持PHP&#xff0c;因此您可以在香港服务器上运行PHP网站。实际上&#xff0c;许多香港托管服务提供商都会在他们的共享主机或VPS上预装PHP以及一些流行的PHP框架&#xff0c;如Laravel、Symfony等&#xff0c;以方便用户部署PHP应用程序。您只需要确保在选择服…

零知识证明在BSV网络上的应用

​​发表时间&#xff1a;2023年6月15日 2024年7月19日&#xff0c;BSV区块链主网上成功通过使用零知识证明验证了一笔交易。 零知识证明是一种技术&#xff0c;它允许一方&#xff08;证明者&#xff09;在不透露任何秘密的情况下&#xff0c;向另一方&#xff08;验证者&…

电脑技巧:如何在Win11电脑上调整设置,让屏幕更加护眼?

目录 一、调整屏幕亮度 二、启用夜间模式 三、调整色彩设置 四、使用第三方护眼软件 五、保持良好的用眼习惯 总结 随着长时间使用电脑的人越来越多,护眼问题也变得越来越重要。Win11作为更新的操作系统,提供了更多的设置选项来帮助我们保护眼睛。本文将详细介绍如何在…

Android Radio2.0——交通公告状态设置(二)

通过前面的学习,我们知道在 Radio 广播中,交通公告(Traffic Announcement, TA)是一个比较重要的概念,它和交通广播(Traffic Radio)是相关的概念,但它们并不完全相同。 一、简介 1、概念介绍 交通公告 定义:交通公告是指在广播中插入的特别信息,通常是关于交通状况…

【前端】CSS控制style样式失效

在CSS中&#xff0c;可以通过几种方式控制或禁用特定的style样式。 使用all: unset来重置所有可继承的属性&#xff0c;并清除所有的样式&#xff1a; .element {all: unset;} 使用inherit值来使属性获取其父元素的值&#xff1a; .element {color: inherit;font-size: inh…