k8s系列文章二:集群配置

一、关闭交换分区

# 临时关闭分区
swapoff -a
# 永久\关闭自动挂载swap分区
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

二、修改cgroup管理器

ubuntu 系统,debian 系统,centos7 系统,都是使用 systemd 初始化系统的。systemd 这边已经有一套 cgroup 管理器了,如果容器运行时和 kubelet 使用 cgroupfs,此时就会存在 cgroups 和 systemd 两种 cgroup 管理器。也就意味着操作系统里面存在两种资源分配的视图,当操作系统上存在 CPU,内存等等资源不足的时候,操作系统上的进程会变得不稳定!

  1. 编辑文件/etc/docker/daemon.json
{
  "exec-opts": [
    "native.cgroupdriver=cgroupfs"  # 可取值cgroupfs、systemd
  ], 
  "registry-mirrors": ["https://yne6emhg.mirror.aliyuncs.com"]  # 改成自己的加速地址,当然没有的话也可以不配置,最多加速效果跟平时一样
}

      2.配置生效

# 重启docker的伴随线程
sudo systemctl daemon-reload
# 重启docker
systemctl restart docker

       3.解释一下阿里源库加速,省的朋友们到处找了(不配置加速的朋友,不用理会,哈哈哈)

  •      登录阿里站点

三、CNI配置

  • 配置之必要性
cat << EOF | tee /etc/cni/net.d/10-containerd-net.conflist
{
 "cniVersion": "1.0.0",
 "name": "containerd-net",
 "plugins": [
   {
     "type": "bridge",
     "bridge": "cni0",
     "isGateway": true,
     "ipMasq": true,
     "promiscMode": true,
     "ipam": {
       "type": "host-local",
       "ranges": [
         [{
           "subnet": "10.88.0.0/16"
         }],
         [{
           "subnet": "2001:db8:4860::/64"
         }]
       ],
       "routes": [
         { "dst": "0.0.0.0/0" },
         { "dst": "::/0" }
       ]
     }
   },
   {
     "type": "portmap",
     "capabilities": {"portMappings": true},
     "externalSetMarkChain": "KUBE-MARK-MASQ"
   }
 ]
}
EOF

四、初始化镜像配置

默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

  •  两种安装方式,任选其一
  • 方式一:自动安装
# 调用可选参数image-repository


# 查看默认镜像列表
kubeadm config images list
# 查看镜像地址调整为阿里源后的列表
kubeadm config images list  --image-repository registry.aliyuncs.com/google_containers
# 安装阿里源镜像
kubeadm config images pull  --image-repository registry.aliyuncs.com/google_containers
  • 方式二:手动安装

        如果k8s的版本是1.24后的版本,选用如下形式安装镜像   

# 查看所需镜像并写入txt文件中
kubeadm config images list > 1.txt


# 测试安装镜像
ctr images pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
# 本地镜像打标签,其中n代表namespace,i代表images
ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6


# 正式环境应用,安装全部
# Ⅰ筛选1.txt中"registry.k8s.io/"内容并剔除
# Ⅱ执行安装命令
cat 1.txt |xargs -I {} ctr images pull registry.cn-hangzhou.aliyuncs.com/google_containers/{}


# 查看已安装
crictl img

        如果k8s的版本是1.24前的版本,选用如下形式安装镜像

# 查看所需镜像并写入txt文件中
kubeadm config images list > 1.txt


# 测试安装组件镜像kube-apiserver
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.28.3


# 正式环境应用,安装全部
# Ⅰ筛选1.txt中"registry.k8s.io/"内容并剔除
# Ⅱ执行安装命令
cat 1.txt |xargs -I {} docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/{}


# 查看已安装
docker images

五、初始化集群

# 启动命令

kubeadm init

六、再初始化集群

  • 第四步初始化肯定失败了?①容器container配置;②镜像库用的registry.k8s.io。①②需外网
  • containerd是docker的子项目,但是现在已经独立出去了
  • kubeadm在版本1.24之后的k8s管理中移除了对docker集成,反而使用了containerd

6.1、容器container配置

# 生成 containerd 的默认配置文件,后缀名一定是toml,不要质疑,因为我尝试过!
containerd config default > config.toml


# 查看 sandbox 的默认镜像仓库在文件中的第几行
cat config.toml | grep -n "sandbox_image"


# 编辑config.toml,定位到 sandbox_image,将 仓库地址修改成阿里源
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.8"
# 效果同上,只是地址稍微换了下
# sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"


# 将文件移动到默认路径
mkdir /etc/containerd
mv config.toml /etc/containerd/config.toml

 # 重载containerd服务
systemctl daemon-reload  
systemctl restart containerd.service

 6.2、镜像库配置

# 生成 默认的初始化配置文件
kubeadm config print init-defaults > init-default.yaml


# 查看默认镜像库
cat init-default.yaml | grep imageRepository

 
# 编辑init-default.yaml

# 将默认的镜像仓库registry.k8s.io修改成阿里源registry.aliyuncs.com/google_containers
sed -i 's#registry.k8s.io#registry.aliyuncs.com/google_containers#' init-default.yaml

# 将master主机信息advertiseAddress: 1.2.3.4中的ip地址改成master主机实际地址172.21.1.254
sed -i 's#advertiseAddress: 1.2.3.4#advertiseAddress: 172.21.1.254#' init-default.yaml


# 将文件移动到默认地址
mv init-default.yaml /etc/kubernetes/init-default.yaml

6.3、在初始化ING

  • 两种启动方式,任选其一
  • ①加载配置文件并启动

# 此时,host主机信息存储在/etc/hosts,k8s基础信息在/etc/kubernetes/init-default.yaml中

kubeadm init --config=/etc/kubernetes/init-default.yaml 

  • ②命令行启动

kubeadm init:在主节点初始化 Kubernetes 控制平面节点。

  • --image-repository registry.aliyuncs.com/google_containers:使用阿里云镜像仓库
  • --kubernetes-version=v1.28.2:指定kubernetes版本,查询命令kubelet --version;
  • --pod-network-cidr=10.244.0.0/16:指定pod的网段,与下面部署的CNI中保持一致 ;
  • --service-cidr=10.96.0.0/12:机器内部虚拟网络,Pod统一访问入口
  • --apiserver-advertise-address=172.21.1.254:指定master主机地址;
# 可以看到,提供的参数其实是可以替代<<5.2>>步骤,好处?自然是定制化书写方便咯!
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2(你的版本) --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=172.21.1.254(你的IP地址)

6.4、结果分析

  • [kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml”
  • [certificates]生成相关的各种证书
  • [kubeconfig]生成相关的kubeconfig文件
  • [bootstraptoken]生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到

6.5、查看k8s日志

# 查看kubelet日志,其中-f是 --follow, -u是过滤出kubelet日志
journalctl -f -u kubelet

# 查看kubelet日志,也可以用如下命令,一样的
journalctl -xeu kubelet

 七、配置kube-config

  • Node是K8s集群中的一个工作节点,可以是物理机或虚拟机。Node上kubelet进程负责管理Pod生命周期。拥有唯一符NodeName
  • Pod是Kubernetes中最小的可部署单元,通常包含一个或多个容器。Pod在Node上运行,共享相同的网络命名空间和存储卷。Pod也有一个唯一的标识符,称为PodName。

  • Node和Pod之间的关系是一对多的关系,即一个Node上可以运行多个Pod,但一个Pod只能运行在一个Node上

  • 查看节点状态

  • 使kubectl与集群通信
# 通信
mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
  • 查看节点状态

八、令牌概念

  • 令牌的用意是为了方便节点的加入
  • 令牌的获取方式有如下四种方式,任取其一皆可
  1. 初始化控制平面节点时,kubeadm init命令会打印出加入令牌:
kubeadm init
...
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  1. 在控制平面节点的/etc/kubernetes/目录下找到生成的token文件,内容即为加入令牌。

  2. 使用kubeadm token list命令查看当前有效的加入令牌。

  3. 如果集群配置错误,可以使用kubeadm reset删除集群,重新执行kubeadm init来初始化集群启动并以此获取新令牌。注,可以配置-r --cri-socket=/var/run/containerd/containerd.sock来实现主机上pod的删除

  4. 若令牌过期(默认24h),可使用命令kubeadm token create --print-join-command生成新令牌

九、将子节点加入集群

  • 一定需要在子节点上运行

  • 其中token(即上一章提到的令牌)可通过kubeadm token list
# 加入集群命令
kubeadm join <Master节点ip>:6443 --token <生成的Token> --discovery-token-ca-cert-hash sha256:<Kubelte Init时生成的hash>

十、安装Pod网络插件

例如Calico或Flannel:

# calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --no-check-certificate
# 应用启动网络容器flannel
kubectl apply -f kube-flannel.yml

十一、查看集群

kubectl get nodes
kubectl get pods --all-namespaces
kubectl get pods -n kube-system

十二、dashboard可视化

  • PASS

十三、引申

  • 非阿里源库的k8s安装与集群配置

十四、结束!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11-13 代理模式

调用者 代理对象 目标对象 代理对象除了可以完成核心任务&#xff0c;还可以增强其他任务,无感的增强 代理模式目的: 不改变目标对象的目标方法的前提,去增强目标方法 分为:静态代理,动态代理 静态代理 有对象->前提需要有一个类&#xff0c;那么我们可以事先写好一个类&a…

擎创动态 | 再获上海区政府肯定,擎创科技被评为年度优秀高新技术企业

11月6日&#xff0c;上海市静安区副区长张慧和市北高新集团总裁陈军一行来到擎创科技调研指导&#xff0c;由擎创科技高管张健和陈莹陪同交流。 陈莹女士首先向副区长一行详细介绍了擎创科技的发展现状、落地实践效益以及未来的规划布局。在公司的成长过程中&#xff0c;得到静…

【Unity】 场景优化策略

Unity 场景优化策略 GPU instancing 使用GPU Instancing可以将多个网格相同、材质相同、材质属性可以不同的物体合并为一个批次&#xff0c;从而减少Draw Calls的次数。这可以提高性能和渲染效率。 GPU instancing可用于绘制在场景中多次出现的几何体&#xff0c;例如树木或…

腾讯云优惠服务器有哪些?腾讯云服务器优惠券领取入口汇总

腾讯云此次推出云服务器中最实惠的2核2G服务器以每年仅需88元的超低价格为用户提供稳定可靠的计算资源。这样的价格对于个人网站、小型企业以及学生开发者来说绝对是一笔难以忽视的优惠。 腾讯云双十一领9999代金券 https://1111.mian100.cn 腾讯云新用户领2860代金券 https:…

快速拉取聚水潭单据的ETL工具

聚水潭介绍 聚水潭平台则是国内较为出名的电商ERP平台&#xff0c;为企业提供了便捷的销售和管理服务&#xff0c;专注于提高交易效率&#xff0c;但是如何将数据快速同步到其他系统一直是很多企业的痛点。 ETLCloud数据集成平台提供了丰富的数据分析工具和算法模型&#xff…

Nat. Med. | 成年人的城市生活环境对心理健康的影响

今天为大家介绍的是来自Jiayuan Xu和Gunter Schumann团队的一篇论文。城市居民暴露于许多可能相互结合和相互作用的环境因素&#xff0c;这些因素可能影响心理健康。目前尚未有工作尝试建模城市生活的复杂实际暴露与大脑和心理健康之间的关系&#xff0c;以及这如何受遗传因素调…

js设置图片放大缩小拖动

效果: 思路: 在外层box进行相对定位relative,img设置绝对定位absolute;通过监听滚轮事件(wheel),设置样式缩放中心点(transformOrigin)和缩放转换(transform);获取到图片大小和位置,设置对应图片宽度高度和top、left偏移;鼠标按下事件(mousedown)和鼠标移动事…

AI机器人软件定制流程

一、项目概述 AI机器人软件定制流程是根据客户的需求&#xff0c;定制开发一款具有人工智能功能的机器人软件。本方案将详细介绍AI机器人软件定制的整个流程&#xff0c;包括需求分析、设计、开发、测试和交付等环节。 二、需求分析 在定制AI机器人软件之前&#xff0c;需要…

pmp考试是智商税吗,是一场持久的割韭菜战吗?

考试只是考试&#xff0c;是不是智商税要看人&#xff0c;跟风考&#xff0c;考了不用&#xff0c;那真的就是智商税&#xff0c;被割韭菜。 那么&#xff0c;什么人适合考PMP&#xff1f; 1、有项目管理实践经验的人&#xff1a;PMP是基于项目管理实践经验的认证考试&#x…

Python数据结构:元组(Tuple)详解

1.介绍和基础操作 Python中的元组&#xff08;Tuple&#xff09;是不可变有序序列&#xff0c;可以容纳任意数据类型&#xff08;包括数字、字符串、布尔型、列表、字典等&#xff09;的元素&#xff0c;通常用圆括号() 包裹。与列表&#xff08;List&#xff09;类似&#xff…

Python实现猎人猎物优化算法(HPO)优化XGBoost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

论文导读 | 图流的分割和摘要

前 言 本次论文导读介绍有关图流的分割和摘要问题的3篇文章。第1篇是partition的&#xff0c;第2篇是summarization的。 首先介绍第一篇文章。 文章一&#xff1a;图分割在分布式系统中有广泛的应用 文章的问题定义是用划分边的方式来分割图。如图所示&#xff0c;把图&#…

群晖Docker(Container Manager)中安装Home Assistant Container

群晖Docker&#xff08;Container Manager&#xff09;中安装Home Assistant Container 不要使用 套件里面的 Home Assistant&#xff0c;不利于后期拓展 方式一&#xff1a; docker run -d --name"home-assistant-1" -v /volume1/docker/homeassistant/config:/c…

互联网医院牌照|互联网医院牌照办理小知识

随着互联网技术的快速发展&#xff0c;互联网医院牌照已经成为医疗行业的一个重要资质&#xff0c;我们致力于为您提供最优质的服务&#xff0c;帮助您的公司或产品顺利获得此牌照。 一、产品特性描述 1、专业性&#xff1a;我们的团队由经验丰富的顾问组成&#xff0c;对互联…

Apipost IDEA插件如何使用

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

leetcode每日一题复盘(11.13~11.19)

leetcode 435 无重叠区间 本题和射气球最小箭数大同小异&#xff0c;但是这一题没做出来&#xff0c;难就难在题目如何理解:移除区间最小数量&#xff0c;使剩下的区间不重叠 那么本质上就是求最少有多少个重叠区间&#xff0c;把重叠区间去掉剩下的区间即不重叠 这里有两种做…

完全免费!超好用的IDEA插件推荐:Apipost-Helper

Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款国产的…

学用 DevChat 的 VSCode 插件,体验AI智能编程工具 (一)

简单说DevChat是一个辅助编程的智能工具&#xff0c;它可以通过自然语言对话的方式与开发者进行交流&#xff0c;帮助开发者更高效地完成编程任务。 有了人工智能工具&#xff0c;编程进入一个新天地。 闻名已久&#xff0c;不若体验一下。 一.准备工作 1.运行环境. A. p…

在Gradio实现两个下拉框进行联动案例解读:change/click/input实践(三)

本文的代码来自ChuanhuChatGPT&#xff0c;通过拆解写得比较好的gradio项目&#xff0c;可以更快理解gradio的一些使用。 ChuanhuChatGPT整体页面效果是比较合理的&#xff1a; 1 下拉框联动效果的解读 本篇是将一个其中【对话】中的【Prompt加载】小模块抽取出来并稍稍修改…