kubernetes集群部署:环境准备及master节点部署(二)

主机名IPv4地址IPv6地址角色安装组件操作系统
k8s130-node190192.168.XX.190240a:XX::190masterkubeadm、kubelet、containerdAnolis OS 8.9+4.19.91-28.1.an8.x86_64
k8s130-node191192.168.XX.191240a:XX::191nodekubeadm、kubelet、cri-oAnolis OS 8.9+4.19.91-28.1.an8.x86_64
k8s130-node189192.168.XX.189240a:XX::189nodekubeadm、kubelet、cri-dockerdAnolis OS 8.9+4.19.91-28.1.an8.x86_64

安装前准备

1、最小化安装虚拟机,安装完之后需要更新到最新

~]# yum -y update

2、关闭防火墙

~]# systemctl disable firewalld && systemctl stop firewalld

3、关闭SELinux

~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

4、确保时间同步服务运行正常,并且可以成功同步时间

~]# systemctl status chronyd -l --no-pager

5、安装必须的一些软件包

~]# yum -y install ipvsadm ipset conntrack-tools iproute-tc conntrack libseccomp wget tar

6、启用内核模块

~]# modprobe ip_conntrack
~]# modprobe nf_conntrack
~]# modprobe ip_vs
~]# modprobe ip_vs_rr
~]# modprobe ip_vs_rr
~]# modprobe ip_vs_wrr
~]# modprobe ip_vs_sh
~]# modprobe br_netfilter
~]# modprobe bridge

7、配置内核参数

~]# cat /etc/sysctl.d/99-sysctl.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding=1
net.ipv4.ip_forward=1
net.ipv4.neigh.default.gc_thresh1=1024
net.ipv4.neigh.default.gc_thresh2=2048
net.ipv4.neigh.default.gc_thresh3=4096
net.netfilter.nf_conntrack_max=2310720net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time = 180
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.ip_local_port_range = 21000 61000vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963

8、关闭swap(在装虚拟机分区时就不做swap最好)

a、swapoff -a
b、注释/etc/fstab中的swap挂载

安装Containerd

containerd最初是Docker引擎的一部分,作为Docker的核心组件负责容器的创建、运行和管理。2017年,Docker决定将containerd作为一个独立的开源项目,以便社区能够更广泛地使用和贡献。containerd的目标是提供一个简单、稳定且高效的容器运行时,它可以作为各种容器生态系统的基础,特别是在与Kubernetes的集成方面。

1、配置第三方镜像源(在线安装Containerd需要配置docker-ce的镜像源,如果不想或者不能在线安装,那么可以通过其他方式:Getting started with containerd)

注:

a、这两种方式安装结果还是有很大不同的;

b、下面使用的是阿里镜像源,docker官方镜像源被qiang

~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo~]# yum repolist|grep docker
docker-ce-stable                    Docker CE Stable - x86_64

2、安装Containerd最新版

~]# yum -y install containerd.io --disableexcludes=docker-ce-stable

3、设置开机启动

systemctl enable containerd

4、设置Containerd

docker-ce的配置文件是/etc/docker/daemon.json ,那么Containerd的呢?答案:/etc/containerd/config.toml。但是,通过docker镜像源在线安装的Containerd的配置文件不可用,需要重新生成配置文件。

mv /etc/containerd/config.toml{,_docker}
containerd config default > /etc/containerd/config.toml
4.1、配置sandbox_image

早先使用dockershim时,只需要配置kubelet的--pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9即可,如果要使用containerd作为kubernetes的运行时,pod-infra-container-image将不生效(不过kubeadm启动kubernetes组件时仍然会用到)

<     sandbox_image = "registry.k8s.io/pause:3.6"
---
>     sandbox_image = "192.168.XX.XX/kubeadm/pause:3.9"

4.2、设置SystemdCgroup && 配置私有仓库认证信息

……
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "192.168.XX.XX/kubeadm/pause:3.7"
    [plugins."io.containerd.grpc.v1.cri".containerd]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true
……
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.XX.XX".auth]
          username = "admin"
          password = "密码" 
 
      [plugins."io.containerd.grpc.v1.cri".registry.headers]
 
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.XX.XX"]
          endpoint = ["http://192.168.XX.XX"]

4.3、Containerd的客户端命令配置

docker-ce的客户端命令就是docker,Containerd的客户端命令crictl和ctr,一般使用crictl,需要配置一下,否则~~哼哼

cat /etc/crictl.yaml 
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 10
debug: false

5、启动Containerd

systemctl start containerd

安装kubeadm、kubelet、kubectl

1、配置第三方镜像源

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

2、安装kubelet kubeadm kubectl

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet

初始化kubernetes master节点

1、生成初始化YAML文件

kubeadm config print init-defaults > kubeadm-init.default.yaml

2、设置初始化文件。如下红色内容需要根据需要修改,另外,advertiseAddress只支持IPv4。

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.XX.190
  bindPort: 6443
nodeRegistration:
  criSocket: unix:///run/containerd/containerd.sock
  imagePullPolicy: IfNotPresent
  name: k8s130-node190
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.30.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.254.0.0/16,2408:822a:730:af01::/112
  podSubnet: 172.254.0.0/16,fa00:cafe:42::/56

scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
iptables:
  masqueradeAll: false
ipvs:
  minSyncPeriod: 0s
  scheduler: "rr"
kind: KubeProxyConfiguration
mode: "ipvs"

3、初始化master节点

kubeadm init --config=kubeadm-init.default.yaml |tee kubeadm-init.log

打印如下内容,则表明初始化成功。另外,根据初始化文件中定义的ttl: 24h0m0s,token的有效期是24小时,过期之后,将无法使用如下打印的token加入kubernetes集群。

安装之后处理

1、验证

~]$ kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
controller-manager   Healthy   ok        
scheduler            Healthy   ok        
etcd-0               Healthy   ok        
~]$ kubectl get node
NAME             STATUS     ROLES           AGE     VERSION
k8s130-node190   NotReady   control-plane   3m44s   v1.30.2

执行kubectl get node,node是NotReady状态 !                        --- --- 没有安装网络插件
执行kubectl get po,pod中coredns是Pending状态!                 --- --- 没有安装网络插件

安装网络插件-Calico

1、下载Calico启动配置文件

wget https://mirrors.chenby.cn/https://github.com/projectcalico/calico/blob/master/manifests/calico-typha.yaml

2、定制Calico配置文件

2.1、配置启用IP双栈(无需IPv6,则不需要配置)

<               "type": "calico-ipam"
---
>               "type": "calico-ipam",
>               "assign_ipv4": "true",
>               "assign_ipv6": "true"

2.2、配置IP地址段(无需IPv6,则只需配置IPv4即可)

<             # - name: CALICO_IPV4POOL_CIDR
<             #   value: "192.168.0.0/16"
<             - name: FELIX_IPV6SUPPORT
<               value: "true"
---
>             - name: CALICO_IPV4POOL_CIDR
>               value: "172.254.0.0/16"
>             - name: CALICO_IPV6POOL_CIDR
>               value: "fa00:cafe:42::/56"
>             - name: IP_AUTODETECTION_METHOD
>               value: "interface=ens.*"
>             - name: IP6_AUTODETECTION_METHOD
>               value: "interface=ens.*"
>             - name: FELIX_IPV6SUPPORT
>               value: "true"

2.3、修改镜像地址(无fan墙能力就得老老实实改)

<           image: docker.io/calico/cni:master
---
>           image: 192.168.XX.XX/library/cni:master
<           image: docker.io/calico/node:master
---
>           image: 192.168.XX.XX/library/node:master
<           image: docker.io/calico/kube-controllers:master
---
>           image: 192.168.XX.XX/library/kube-controllers:master
<           image: docker.io/calico/typha:master
---
>           image: 192.168.XX.XX/library/typha:master

2.4、创建Calico
kubectl apply -f calico-typha.yaml 
2.5、验证是否成功

Calico Typha启动的pod有3类:controller、node、typha。状态都变成Running,且Ready为1/1才表明成功了。controller是由deploy调度创建、node由daemonset调度创建(确保每个node上都启动一个calico-node,并且使用hostNetwork)

3、Calico组件说明

3.1. Calico Node

Calico Node 是 Calico 的核心组件,运行在每个集群节点上,负责以下任务:

  • IPAM(IP Address Management):管理分配和回收 Pod 的 IP 地址。
  • BGP(Border Gateway Protocol):使用 BGP 与其他 Calico 节点进行路由信息交换,确保网络中的所有 Pod 可以相互通信。
  • 网络策略实施:通过 iptables 或 eBPF 实施网络策略,控制 Pod 之间的流量。
  • Felix:Calico Node 包含 Felix 代理,负责与 Linux 内核网络栈交互,应用网络策略和管理路由。
3.2. Calico Controller

Calico Controller 是一个 Kubernetes 控制器,负责管理 Calico 与 Kubernetes API 之间的交互。其主要职责包括:

  • 同步 Calico 和 Kubernetes 对象:确保 Calico 的网络策略、IP 池和其他配置与 Kubernetes 中定义的对象保持一致。
  • 管理 Kubernetes 服务:处理 Kubernetes 服务对象,确保服务的 IP 地址正确配置,并与 Calico 网络策略兼容。
  • 确保高可用性:通过定期检查和同步,确保 Calico 配置的一致性和高可用性。
3.3. Calico Typha

Calico Typha 是一个可选的组件,主要用于大规模 Kubernetes 集群,以减少 API 服务器的负载和提高性能。其职责包括:

  • 聚合和分发数据:从 Kubernetes API 服务器获取更新,并将这些更新分发给集群中的 Calico Node 实例。
  • 减少 API 请求数量:通过集中处理和分发数据,Typha 减少了直接与 API 服务器通信的 Calico Node 实例数量,从而降低了 API 服务器的负载。
  • 提高集群性能:在大规模集群中,Typha 帮助减少网络流量和提高配置分发效率,从而提高整体性能。
3.4. 总结
  • Calico Node 是 Calico 的核心组件,负责管理节点上的网络配置和策略实施。
  • Calico Controller 负责 Calico 与 Kubernetes API 的交互,确保配置一致性和高可用性。
  • Calico Typha 用于大规模集群中,聚合和分发数据,减少 API 服务器的负载,提高性能。

下一篇:《kubernetes集群部署:node节点部署和CRI-O运行时安装(三)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/867275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础-接口与实现

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Java 接口 什么是接口&#xff1f; 声明接口 实现接口 继承接口 接口的多继承 标记接口 Java 接口 …

华为仓颉可以取代 Java 吗?

大家好&#xff0c;我是君哥。 在最近的华为开发者大会上&#xff0c;华为亮相了仓颉编程语言&#xff0c;这是华为历经 5 年&#xff0c;投入大量研发成本沉淀的一门编程语言。 1 仓颉简介 按照官方报告&#xff0c;仓颉编程语言是一款面向全场景智能的新一代编程语言&#…

好消息!Stable Diffusion 3 允许商业化,很快开源更大版本模型

7月6日凌晨&#xff0c;著名开源大模型平台Stability AI修改了社区许可协议&#xff0c;最新发布的文生图模型Stable Diffusion 3 Medium允许商业化&#xff08;以下简称“SD3-M”&#xff09;。 如果企业、个人开发者每年收入低于100万美元&#xff08;大约726万元人民币&…

《安全行业大模型技术应用态势发展报告(2024)》

人工智能技术快速迭代发展&#xff0c;大模型应用场景不断拓展&#xff0c;随着安全行业对人工智能技术的应用程度日益加深&#xff0c;大模型在网络安全领域的应用潜力和挑战逐渐显现。安全行业大模型技术的应用实践不断涌现&#xff0c;其在威胁检测、风险评估和安全运营等方…

腐蚀服务器如何设置管理员

可以设置服主与管理员 控制台中设置&#xff08;需游戏账号在线&#xff09; 服主 添加&#xff1a;在控制台中输入ownerid空格SteamID 删除&#xff1a;在控制台中输入removeowner空格SteamID 管理员 添加&#xff1a;在控制台中输入moderatorid空格SteamID 删除&#…

C++:二维数组的遍历

方式一&#xff1a; #include <vector> #include <iostream> int main() { // 初始化一个2x3的二维向量&#xff08;矩阵&#xff09; std::vector<std::vector<float>> matrix { {1.0, 2.0, 3.0}, // 第一行 {4.0, 5.0, 6.0} // 第二行 };…

【Python文件】操作终极指南:高效管理和处理文件系统的必备技能

目录 ​编辑 1. 文件的基础操作 1.1 打开/关闭文件 ​编辑 示例代码 文件对象 使用with语句打开文件 2. 读文件 2.1 使用read方法读取文件 2.2 使用readline方法读取文件 2.3 使用readlines方法读取文件 2.4 使用for循环读取文件 3. 写文件 3.1 使用write方法写文…

B组亚太赛数学建模

问题1 1.对训练数据集进行数据清洗&#xff0c;处理缺失值和异常值。 2.采用散点图作为可视化手段。 3.采用皮尔逊相关系数进行相关性分析。 4.提出预防措施。 问题2 1.采用k-means聚类算法将洪水概率分为高中低三个群组。 2.通过线性回归模型计算特征权重。 3.选择特定…

django高校教务系统-计算机毕业设计源码81661

目 录 摘要 1 绪论 1.1 研究背景 1.2目的及意义 1.3论文结构与章节安排 2 高校教务系统设计分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4…

【新能源时代!看大模型(LLMs)如何助力汽车自动驾驶!】

文末有福利&#xff01; 引言 本文主要介绍大模型(LLMs)如何助力汽车自动驾驶&#xff0c;简单来说&#xff0c;作者首先带大家了解大模型的工作模式&#xff0c;然后介绍了自动驾驶大模型的3大应用场景&#xff0c;最后指出自动驾驶大模型将会是未来的发展趋势&#xff0c;只…

制定事件响应计划的四个关键步骤,如何做到风险闭环

一个有效的安全事件响应策略的关键组成部分有哪些&#xff1f;一个有效的安全事件响应策略包括四个关键组成部分&#xff0c;它们协同工作以确保对网络安全问题的快速和有效响应。 一个有效的安全事件响应策略的关键组成部分有哪些&#xff1f; 一个有效的安全事件响应策略包括…

Linux笔记之二

Linux笔记之二 一、文件属性学习二、软链接和硬链接1.软链接2.硬链接 三、Vim编辑器四、账号管理总结 一、文件属性学习 Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。为了保护系统的安全性&#xff0c;Linux系统对不同…

HTML5使用<mark>标签:高亮显示文本

1、<mark>标签的使用 mark 标签用于表示页面中需要突出显示或高亮的一段文本&#xff0c;这段文本对于当前用户具有参考作用。它通常在引用原文以引起读者注意时使用。<mark>标签的作用相当于使用一支荧光笔在打印的纸张上标出一些文字。它与强调不同&#xff0c;…

短视频商城系统源码揭秘:架构设计与实现

在短视频平台和电商平台蓬勃发展的背景下&#xff0c;短视频商城系统应运而生&#xff0c;融合了短视频内容和电商功能&#xff0c;给用户带来了全新的购物体验。本文将揭示短视频商城系统的源码架构设计与实现&#xff0c;帮助开发者了解该系统的内部工作原理及其关键技术。 …

深度学习基础以及vgg16讲解

一 什么是卷积 上图所示&#xff0c;为图像边缘提取得一个卷积过程&#xff0c;卷积核就是计算当前像素左右两边得像素差&#xff0c;这个差值越大代表越可能是图像边缘。因此当实现其它功能时&#xff0c;只需要调整卷积核得参数即可。深度学习的训练其实就是在确定这些参数。…

学习笔记——动态路由——OSPF(邻接/邻居)

十、OSPF的邻接/邻居 1、OSPF路由器之间的关系 (1)基本介绍 在OSPF网络中&#xff0c;为了交换链路状态信息和路由信息&#xff0c;邻居设备之间首先要建立邻接关系&#xff0c;邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。 OSPF路由器的两种关系&#x…

Type-C接口快充取电技术的实现

Type-C接口快充取电技术的实现 Type-C接口快充取电技术主要通过USB PD&#xff08;Power Delivery&#xff09;协议实现。这种技术利用了Type-C接口的物理特性和PD协议的智能性&#xff0c;实现了高效、安全、快速的充电过程。具体实现过程如下&#xff1a; 接口连接与检测&a…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件串口通信软件&#xff1a;stc-isp蓝牙模块&#xff1a;HC-04LED模块(高电平点…

STM32CubeMX——定时器产生PWM基础(HAL库)

目录&#xff1a; 一、STM32CubeMX 配置1、选择定时器通道&#xff1a;2、设置 TIM2 channel1 的预分频器、自动重装等值&#xff1a; 二、keil5 进一步编程1、开启定时器2 通道 1 的 PWM 输出&#xff1a;2、改变 CCR 值&#xff08;改变占空比&#xff09;&#xff1a; 参考文…