搭建k8s集群完整版

基础设置

设置主机ip

nmcli con add ifname ens33 con-name ens33 autoconnect yes type ethernet
nmcli con modify ens33 ipv4.method manual ipv4.dns 114.114.114.114 ipv4.addresses 192.168.109.102/24 ipv4.gateway 192.168.109.2

修改主机名

hostnamectl set-hostname master

关闭防火墙

systemctl stop firewalld

关闭selinux

vim /etc/selinux/config
SELINUX=disabled

关闭swap

swapoff -a //临时关闭
vim /etc/fstab
#注释掉swap的挂载条目

修改内核参数

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
# 将 overlay 和 br_netfilter 这两行文本写入
# 到 /etc/modules-load.d/containerd.conf 文件中
# 这两个模块是 Docker 或 containerd 这类容器运行时经常需要的
# 用于提供 overlay 文件系统支持和网络桥接功能
modprobe overlay
modprobe br_netfilter
# 手动加载内核模块
# modprobe 命令用于添加或移除内核模块 cat /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1 # 这个设置允许 iptables 规则应用于桥接流量
net.ipv4.ip_forward = 1 # 这个设置允许 IP 转发。在 Kubernetes 集群中,节点(Node)之间以及节点与 Pod 之间的网络流量可能需要通过 IP 转发来路由
net.bridge.bridge-nf-call-ip6tables = 1 # 与 bridge-nf-call-iptables 类似,但这个设置是针对 IPv6 流量的。它允许 ip6tables 规则应用于桥接流量。 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack sysctl --system
题外话

在 Linux 系统中,sysctl 命令用于读取和修改内核参数(也称为 sysctl 参数)。这些参数定义了内核如何操作,并控制各种系统特性。

你提到的两个命令 sysctl -psysctl --system 在功能上有一些区别,尽管它们都与加载或应用 sysctl 配置文件有关。

  1. sysctl -p

    • 这个命令用于从指定的文件(默认为 /etc/sysctl.conf)或 /etc/sysctl.d//run/sysctl.d/(在某些系统上)目录下的文件中读取 sysctl 参数,并立即应用它们。
    • 如果你在 /etc/sysctl.conf/etc/sysctl.d/ 下的文件中修改了 sysctl 参数,但还没有重启系统,你可以使用 sysctl -p 命令来应用这些更改,而无需重启。
    • 默认情况下,sysctl -p 只会读取 /etc/sysctl.conf/etc/sysctl.d/ 目录下的文件。
  2. sysctl --system

    • 这个命令会读取并应用多个目录下的 sysctl 配置文件。具体来说,它会读取 /usr/lib/sysctl.d//run/sysctl.d//etc/sysctl.d//etc/sysctl.conf 这些目录和文件(在某些系统上可能有所不同)。
    • 它会按照目录的字母顺序和文件名的字母顺序来应用配置,确保先加载优先级较低的配置,后加载优先级较高的配置。
    • 使用 --system 选项的目的是为了提供一个更完整的方法来加载和应用 sysctl 配置,确保所有的配置都被考虑到了。

注意

  • 在某些系统上,/usr/lib/sysctl.d/ 目录下可能包含由系统包管理器安装的默认配置,而 /etc/sysctl.d/ 目录下则包含管理员手动添加的或特定于该系统的配置。
  • 如果你修改了 sysctl 参数,并希望这些更改在系统重启后仍然生效,你应该编辑 /etc/sysctl.conf 文件或 /etc/sysctl.d/ 目录下的文件,而不是直接运行 sysctl 命令。然后,你可以使用 sysctl -psysctl --system 来应用这些更改。
  • 在某些情况下,你可能还需要确保你的 sysctl 配置更改被持久化到某个启动服务或初始化脚本中,以确保在系统启动时自动应用这些更改。这通常取决于你使用的 Linux 发行版和初始化系统(如 SysVinit、Upstart、systemd 等)。

安装docker

yum install -y yum-utils

yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

yum install docker-ce -y

systemctl enable docker --now

containerd config default > /etc/containerd/config.toml

containerd config default | \
sed -e 's|registry\.k8s\.io/pause:[0-9.]\+|registry\.aliyuncs\.com/google_containers/pause:3.9|g' \
-e 's,SystemdCgroup = .*,SystemdCgroup = true,' \
-e 's/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/&\n \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = \["https:\/\/mirror.ccs.tencentyun.com"]\n/' \
-e 's/\[plugins."io.containerd.grpc.v1.cri".registry.mirrors\]/&\n \[plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]\n endpoint = \["https:\/\/registry\.aliyuncs\.com\/google_containers"]/' \
-e '/^\s*$/d' |
tee /etc/containerd/config.toml vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://mirror.ccs.tencentyun.com"] [root@node1 ~]# vim /etc/docker/daemon.json {
"registry-mirrors":["https://mirror.ccs.tencentyun.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

安装k8s

cat /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
gpgcheck=0 yum install -y kubelet kubectl kubeadm
systemctl enable kubelet crictl config runtime-endpoint /var/run/containerd/containerd.sock
crictl config image-endpoint /var/run/containerd/containerd.sock
systemctl restart containerd

解释

crictl 是一个命令行工具,用于与 Kubernetes 的容器运行时接口(CRI,Container Runtime Interface)进行交互。当使用 Kubernetes 集群时,kubelet 通过 CRI 与底层的容器运行时(如 Docker、containerd、CRI-O 等)进行通信。在许多现代 Kubernetes 部署中,containerd 作为容器运行时正在变得越来越流行。

您提供的两个命令是用来配置 crictl 工具,以便它可以与 containerd 进行通信。具体来说:

  1. crictl config runtime-endpoint /var/run/containerd/containerd.sock

这个命令告诉 crictl 如何与 containerd 的运行时服务进行通信。/var/run/containerd/containerd.sock 是一个 Unix 套接字文件,它通常是 containerd 运行时服务监听的地址。通过配置这个 endpoint,crictl 可以发送命令给 containerd 来管理容器。

  1. crictl config image-endpoint /var/run/containerd/containerd.sock

这个命令告诉 crictl 如何与 containerd 的镜像服务进行通信。尽管在许多情况下,containerd 的运行时服务和镜像服务都使用同一个 Unix 套接字文件(即 /var/run/containerd/containerd.sock),但理论上它们可以是不同的。然而,在大多数配置中,这两个 endpoint 是相同的。

要使这些配置更改生效,您通常需要在运行 crictl 命令之前设置这些环境变量,或者使用配置文件来永久保存这些设置。但请注意,crictl 的一些版本可能不支持直接通过命令行设置这些配置,因此您可能需要查阅您正在使用的 crictl 版本的文档来了解如何正确设置这些配置。

另外,这些命令本身不会改变任何系统配置或文件;它们只是在当前的 crictl 会话中设置这些值。如果您想永久保存这些更改,您可能需要将它们添加到您的 shell 配置文件(如 ~/.bashrc~/.bash_profile~/.zshrc 等)中,或者在运行 crictl 时使用 --runtime-endpoint--image-endpoint 标志来指定这些值。

升级内核

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
sed -i "s#http://elrepo.org/linux#https://mirrors.tuna.tsinghua.edu.cn/elrepo#g" /etc/yum.repos.d/elrepo.repo
yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

解释

这段命令序列在 CentOS 或 RHEL 7 系统中执行了一系列操作,以安装来自 ELRepo 的长期支持(LT)内核,并更新其软件仓库的镜像地址。以下是对每一步的详细解释:

  1. rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

    • 这条命令从 ELRepo 的官方网站导入其 GPG 密钥。GPG 密钥用于验证从 ELRepo 下载的软件包的完整性和真实性。
  2. yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y

    • 使用 yum 安装 ELRepo 的发行版 RPM 包。这个 RPM 包包含了 ELRepo 的 YUM 仓库配置,使系统可以访问 ELRepo 提供的软件包。-y 参数自动接受所有提示,无需用户干预。
  3. sed -i "s#http://elrepo.org/linux#https://mirrors.tuna.tsinghua.edu.cn/elrepo#g" /etc/yum.repos.d/elrepo.repo

    • 使用 sed 命令编辑 ELRepo 的 YUM 仓库配置文件,将仓库的 URL 从 http://elrepo.org/linux 更改为 https://mirrors.tuna.tsinghua.edu.cn/elrepo。这通常是为了提高下载速度或稳定性,因为使用国内的镜像服务器可能会更快。
  4. yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64

    • 使用 yum 从 ELRepo 的 elrepo-kernel 仓库安装长期支持(LT)内核。LT 内核为旧系统提供了更长时间的支持和稳定性。-y 参数自动接受所有提示,--enablerepo="elrepo-kernel" 指定只启用 elrepo-kernel 仓库。
  5. grub2-set-default 0

    • 使用 grub2-set-default 命令设置 GRUB2 的默认启动项为第一个(索引为 0)。这通常意味着在重启后,系统将使用新安装的 LT 内核启动。
  6. grub2-mkconfig -o /boot/grub2/grub.cfg

    • 生成 GRUB2 的配置文件。这确保了 GRUB2 识别了新的内核,并将其包含在启动菜单中。
  7. reboot

    • 重启系统。在重启后,系统应该使用新安装的 LT 内核启动。

请注意,在执行这些命令之前,最好备份重要的系统文件和数据,并确保您了解每一步的作用和可能的影响。此外,根据您的网络环境和系统配置,可能还需要进行其他配置或调整。

初始化

[root@master ~]# kubeadm init --apiserver-advertise-address=10.104.43.33(master的ip) --image-repository registry.aliyuncs.com/google_containers(指定镜像仓库) --kubernetes-version v1.23.6 (指定版本)--service-cidr=10.96.0.0/12 (划分服务网段)--pod-network-cidr=10.244.0.0/16(划分pod网段)

[root@master ~]# kubeadm init --apiserver-advertise-address=10.104.43.44 --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.28.2 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

* 显示successfully 说明格式化成功
* 执行第二个红色方框内的三条命令
* 最后一个方框是node节点加入的密钥
* 如果,初始化的时候清屏不好找,那么可以使用命令查看token
* 如果没有过期,那么就可以直接使用
* 如果过期了,那么需要重新获取token'kubeadm token create' 例如:
[root@master ~]# kubeadm token create --print-join-command
kubeadm join 192.168.109.101:6443 --token izfe9a.vnkoxqjqkwyppcjb --discovery-token-ca-cert-hash sha256:03d6008d14db99b61e1792726e71d937aef6e775dbd2c8e37eeecbf71453588e
这个命令会输出一个完整的kubeadm join命令,包括新生成的token和集群的API服务器地址。

设置补全

echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "source <(kubeadm completion bash)" >> ~/.bashrc
echo "source <(istioctl completion bash)" >> ~/.bashrc
# 部署CNI网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
(kubectl delete -f kube-flannel.yml 删除)

例子

[root@master k8s]#  kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@master k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-85b98978db-pmrwh 1/1 Running 0 14s
[root@master k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 78m
[root@master k8s]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-85b98978db-pmrwh 1/1 Running 0 29s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 78m
[root@master k8s]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@master k8s]# kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-85b98978db-pmrwh 1/1 Running 0 2m12s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 80m
service/nginx NodePort 10.105.223.172 <none> 80:30663/TCP 6s
[root@master k8s]# curl http://localhost:30663
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p> <p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master k8s]#

搭建k8s集群完整版本的更多相关文章

  1. kubeadm搭建K8s集群及Pod初体验

    基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...

  2. 教你用multipass快速搭建k8s集群

    目录 前言 一.multipass快速入门 安装 使用 二.使用multipass搭建k8s集群 创建3台虚拟机 安装master节点 安装node节点 测试k8s集群 三.其他问题 不能拉取镜像:报 ...

  3. 使用kubeadm方式搭建K8S集群

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...

  4. Kubernetes_从零开始搭建k8s集群(亲测可用)

    一.前言 本文讲述从零开始搭建k8s集群,均使用国内镜像,版本均统一,使用两个虚拟机,一个主节点,一个从节点,保证k8s一次搭建成功. 注意:Kubernetes,简称K8s,是用8代替名字中间的8个 ...

  5. kubeadm 搭建 K8S集群

    kubeadm是K8s官方推荐的快速搭建K8s集群的方法. 环境: Ubuntu 16.04 1 安装docker Install Docker from Ubuntu’s repositories: ...

  6. 搭建K8S集群前置条件

    搭建K8S集群 搭建k8s环境平台规划 单master集群 单个master节点,然后管理多个node节点 多master集群 多个master节点,管理多个node节点,同时中间多了一个负载均衡的过 ...

  7. 搭建K8S集群

    一.前言 我们将现有的虚拟机称之为Node1,用作主节点.为了减少工作量,在Node1安装Kubernetes后,我们利用VirtualBox的虚拟机复制功能,复制出两个完全一样的虚拟机作为工作节点. ...

  8. 1 搭建K8s集群

    官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing ...

  9. 从0到1搭建k8s集群系列1:安装虚拟机及docker

    前言 本系列文章记录了本人学习k8s集群搭建的过程,从k8s基本组件的安装.到部署mysql服务到k8s集群.部署web项目到k8s集群以及安装可视化界面管理工具kuboard. 因为k8s的组件安装 ...

  10. CentOS7 使用 kubeadm 搭建 k8s 集群

    一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...

随机推荐

  1. shell脚本中的运算符和条件判断

    shell脚本中的运算符和条件判断: 一.算术运算符 在Shell脚本中,你可以使用各种运算符来执行数学运算.比较和逻辑操作. 计算方式: $[ ] $(( )) 例: a=$[(9+5)90] 打印 ...

  2. 力扣423(java)-从英文中重建数字(中等)

    题目: 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9).按 升序 返回原始的数字. 示例 1: 输入:s = "owoztneoer"输出:&quo ...

  3. 用积木讲运维,这样的IT人太会了

    简介: 日志服务SLS提供数据采集.加工.分析.告警可视化与投递功能,为AIOps.大数据分析.运营服务.大数据安全等场景提供支撑,并能以搭积木的方式适配各类运维场景,辅助企业的IT决策.近日,日志服 ...

  4. 云原生时代下,微服务体系与 Serverless 架构的发展、治理与融合

    简介: 7 月 22.23 日为期两天的 2022 稀土开发者大会召开在即,此次阿里云 Serverless 研发负责人杨皓然(不瞋)作为大会出品人,带来<微服务与 Serverless> ...

  5. Apsara Stack 同行者专刊 | 怀同行之心,筑信任之基,践数智之行

    简介: 政企云平台处在怎样的历史阶段?数智创新的同行者们面临着怎样的挑战与机遇?在时代巨幕下,政企期待云厂商扮演怎样的角色?阿里云智能研究员.混合云平台总经理刘国华认为,云厂商不仅需要有定力与实力,也 ...

  6. DataV 3D 平面地图 2.0 焕新上线

    ​简介:DataV3月,3D平面地图2.0现已上线~ 3D 平面地图 2.0 现已上线~ 让我们来看看更新了哪些功能吧! 01 交互升级,省市区自由下钻 自带行政区域数据,无需配置: ​ 甚至,可以通 ...

  7. 如何 0 改造,让单体/微服务应用成为 Serverless Application

    简介: 随着 2013 年以 Docker 为代表的容器技术.CNCF 基金会以及 K8s 的发展等,云原生开始被广大开发者所熟知.云原生时代之前还有两个阶段:一是自建 IDC 机房,二是简单地把原有 ...

  8. 基于 Observable 构建前端防腐策略

    ​简介:To B 业务的生命周期与迭代通常会持续多年,随着产品的迭代与演进,以接口调用为核心的前后端关系会变得非常复杂.在多年迭代后,接口的任何一处修改都可能给产品带来难以预计的问题.在这种情况下,构 ...

  9. 阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率

    简介: 8月25日,阿里云发布IoT Studio升级版,新增了解决方案引擎,让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改,即可交付.使整个物联网解决方案的交付过程由几个月,缩短到几小时 ...

  10. 他又来了,.net开源智能家居之小米米家的c#原生sdk【MiHome.Net】1.0.0发布,快来打造你的私人智能家居吧

    背景介绍 hi 大家好,我是三合,作为一个非著名懒人,智能家居简直刚需,在上一篇文章他来了他来了,.net开源智能家居之苹果HomeKit的c#原生sdk[Homekit.Net]1.0.0发布,快来 ...