2024.9.4(k8s)

一、前期准备

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 \<\ 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 ![](https://i-blog.csdnimg.cn/direct/a896308716724fdeb4f70ad53b48fb24.png) \[root@k8s-master \~\]# kubeadm config images pull --config /root/new.yaml

相关推荐
LQ深蹲不写BUG12 小时前
微服务事务管理利器:Seata 核心原理与实践指南
微服务·云原生·架构
nathan052913 小时前
Kubernetes 实战练习指南
云原生·容器·kubernetes
無名之輩14 小时前
Nvidia Device Plugin入门二之envvar策略
kubernetes
云和数据.ChenGuang15 小时前
微服务技术栈
微服务·云原生·架构
syty202015 小时前
K8s是什么
容器·kubernetes·dubbo
江团1io017 小时前
微服务雪崩问题与系统性防御方案
微服务·云原生·架构
Evan Wang17 小时前
使用Terraform管理阿里云基础设施
阿里云·云原生·terraform
向上的车轮18 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
灵犀物润18 小时前
Kubernetes 配置检查与发布安全清单
安全·容器·kubernetes
360智汇云19 小时前
k8s交互桥梁:走进Client-Go
golang·kubernetes·交互