Ubuntu安装K8S(1.28版本,基于containrd)

原文网址:Ubuntu安装K8S(1.28版本,基于containrd)-CSDN博客

简介

本文介绍Ubuntu安装K8S的方法。

官网文档:这里

1.安装K8S

1.让apt支持SSL传输

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates

2.下载 gpg 密钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - 

3.添加 k8s 镜像源

创建/etc/apt/sources.list.d/kubernetes.list文件,并添加阿里的K8S源。

sudo touch /etc/apt/sources.list.d/kubernetes.list
sudo vi /etc/apt/sources.list.d/kubernetes.list

添加的内容如下:

deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main

4.安装k8s

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

kubeadm用于初始化环境,kubectl用于操作kubelet。 

5.启动k8s

启动k8s

sudo systemctl start kubelet

设置开机启动

sudo systemctl enable kubelet

6.命令自动补全

 这几个命令没有自动补全,用起来不方便。启用自动补全的方法见:这里

2.配置K8S环境

执行命令时有时候会报下边错误,不用管它。报错原因:去k8s官网查看发布版列表,但是国内访问不了这个网站,连不上;此时会自动使用本地客户端的版本,本处是:1.28.2。

1.禁用防火墙和swap

这两步必须操作!不然k8s无法正常运行。

1.禁用防火墙

sudo sysemctl stop ufw
sudo systemctl disable ufw

2.禁用swap

修改/etc/fstab文件,将swap所在的行注释掉

2.预检

执行安装之前,会做一系列的系统预检查,以确保主机环境符合安装要求,如果检查失败,就直接终止,不进行init操作。因此可以通过命令执行预检查操作,确保系统就绪后再进行init操作。会检查内存大小等。

sudo kubeadm init phase preflight

到这一步一般会报错:

原因是:默认关闭了cri(容器运行时),需要启用它。 本处先不处理,下边第4步安装容器运行时之后,这个就解决了。

3.网络设置

转发 IPv4 并让 iptables 看到桥接流量。 官网:这里

执行如下指令:

1.向k8s.conf写入两行配置并启用它

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilter

2.设置所需的 sysctl 参数,参数在重新启动后保持不变

下边命令会向k8s.conf写入三行内容

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

3.应用 sysctl 参数而不重新启动

sudo sysctl --system

4.安装容器运行时

官网:这里

需要在集群内每个节点上安装一个容器运行器以使 Pod 可以运行在上面。容器运行器实现了CRI(容器运行时接口),常见的容器运行器有:

  1. containerd
  2. CRI-O
  3. Docker(使用 cri-dockerd 适配器来将 Docker 与 Kubernetes 集成)
  4. Mirantis Container Runtime

我是用containerd,这是现在最常用的。安装了K8S后,默认会安装contrainerd,可以用此命令查看:

ctr -v

结果

1.生成配置并修改

先切换到root用户,然后执行如下命令:

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

会生成配置文件:/etc/containerd/config.toml,修改如下配置项 :

修改1:修改cgroup为systemd

原内容

SystemdCgroup = false

修改为

SystemdCgroup = true

kubelet 的 cgroup 驱动 默认是systemd,这里需要保持一致。详见:官网

修改2:沙箱使用阿里云的源

原内容

sandbox_image = "registry.k8s.io/pause:3.6"

修改为

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"

修改3:使用国内的镜像源

在plugins."io.containerd.grpc.v1.cri".registry.mirrors下边添加如下内容:

内容为:

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://ustc-edu-cn.mirror.aliyuncs.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn/"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]endpoint = ["registry.aliyuncs.com/google_containers"]

2.重启containerd

修改完毕后,重启containerd

sudo systemctl daemon-reload
sudo systemctl restart containerd

让containerd开机自启

sudo systemctl enable containerd

5.搭建K8S集群

方案概述:使用kubeadm init命令创建master节点,然后再用kubeadm join命令创建node节点并加入master。

1.下载镜像

为了加快kubeadm创建集群的过程,可以预先下载所有镜像。

查看镜像

kubeadm config images list --image-repository=registry.aliyuncs.com/google_containers

结果

下载镜像(阿里云)

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

结果 

2.部署 master

1.初始化master

sudo kubeadm init \--apiserver-advertise-address 192.168.5.193 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.2 \--service-cidr 10.100.0.0/16 \--pod-network-cidr 10.96.0.0/16
参数说明
apiserver-advertise-addressAPI 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口
image-repository镜像拉取的仓库,填写国内镜像源
kubernetes-versionK8s 版本,本文值为 v1.28.2
service-cidr为服务的虚拟 IP 地址另外指定 IP 地址段。默认值:“10.96.0.0/12”
pod-network-cidr指明 Pod 网络可以使用的 IP 地址段。如果使用 Flannel 网络,必须配置这个字段。

结果:

文本:

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/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou 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 192.168.5.193:6443 --token nml0zp.6uiyj1ncjxd33py6 \--discovery-token-ca-cert-hash sha256:64b2ebebff8317034b8ae401ce6481d62fa1aeff5c2d78781bed4990055a6836

备注

如果你想重新kubeadm init,可以先kubeadm reset,再kubeadm init。 

2.配置环境 

执行上边的命令:

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

3.查看状态

查看节点状态

kubectl get nodes

结果

可以发现,是“NotReady” 状态,因为还没有安装网络插件。

查看pods状态

kubectl get pods -A

结果

4.安装网络插件

K8S中网络架构是很重要的。CNI(Container Network Interface)意为容器网络接口,它是一种标准设计,目的是进行数据转发、让用户在容器创建或销毁时能够更容易地配置容器网络。

CNI网络插件只在master安装即可。

有如下常见的CNI网络插件产品:

  1. Flannel(比较常用。简单易用,但缺乏高级功能,例如配置网络策略和防火墙)
  2. Calico(最常用。高性能、高灵活性、功能强大)
  3. Weave
  4. Canal

本文使用Calico。

1.下载calico配置文件

先创建个文件夹,用于存放配置文件:

mkdir -p /work/devops/k8s/config
cd /work/devops/k8s/config

下载calico配置文件 

wget https://docs.tigera.io/archive/v3.25/manifests/calico.yaml

2.修改calico配置文件

vi calico.yaml

原来的配置

# - name: CALICO_IPV4POOL_CIDR
#   value: "192.168.0.0/16"

修改后的配置(注意:value与上边kubeadm init的--pod-network-cidr参数保持一致)

- name: CALICO_IPV4POOL_CIDRvalue: "10.96.0.0/12"

3.启用calico

kubectl apply -f ./calico.yaml

结果:

5.再次查看状态

需要过一会儿才会成为正常状态

查看节点状态

kubectl get nodes

结果

查看pod状态 

kubectl get pods -A

或者:

kubectl get pods -n kube-system

结果

3.部署node节点(非必须)

将上边的部署命令复制下来,到node机器上去执行即可。

kubeadm join 192.168.5.193:6443 --token nml0zp.6uiyj1ncjxd33py6 \--discovery-token-ca-cert-hash sha256:64b2ebebff8317034b8ae401ce6481d62fa1aeff5c2d78781bed4990055a6836

注意:这段kubeamd join命令的token只有24h,24h就过期,在master上执行kubeadm token create --print-join-command 重新生成。

4.部署dashboard

见:Ubuntu安装k8s的dashboard(管理页面)-CSDN博客

5.测试pod运行

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

mysqlCPU超过100%的详细解决过程

前段时间我的一个网站经常打不开,通过检查发现服务器cpu占用超过100%,通过top命令发现是mysql占用cpu特别高导致的,下面这篇文章主要给大家介绍了关于mysql占用CPU超过100%的详细解决过程,需要的朋友可以参考下 一、使用top命令看到的情况如下&#xff1a; 可以看到服务器负载…

spring security oauth2搭建认证服务器

如图&#xff08;上面图片的代码在业务项目中&#xff09;&#xff0c;第一步在独立的业务项目中&#xff0c;先获取授权码&#xff08;也叫jsessionId&#xff09;、获取授权码的路径就是 /oauth2/authorize&#xff0c;这个路径是oauth2的框架中被OAuth2AuthorizationEndpoin…

tcp 乱序度量与丢包标记

传统 tcp 以序列号差度量乱序&#xff0c;比如 1, 2, 3, 4, 6, 7, 8, 5 这个序列的 5 延后了 3 个段&#xff0c;就称这个序列的乱序度为 3。 如果乱序度为 m&#xff0c;则序列 n, n 1 k, n 1 k r, …, n 1 k r x 中&#xff0c;只要 (n 1 k r x) - (n 1) k …

vmware虚拟机中Nat、桥接模式和仅主机的差别

NAT 在NAT模式下&#xff0c;主机3是Kali和Win两个操作系统的宿主机&#xff0c;那么Kali和Win可以连接到外网&#xff0c;也可以和主机3进行互联&#xff0c;但是主机1和主机2不能连接到Kali和Win。 桥接 在桥接模式下&#xff0c;主机3是Kali和Win两个操作系统的宿主机&…

Javascript知识点锦集

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/135165704 出自【进步*于辰的博客】 文章目录 1、其他知识点链接7、关于 false8、关于 null 与 …

【开源学习】ThingsBoard -- 基本配置与使用

【开源学习】ThingsBoard -- 基本配置与使用 租户及客户管理租户及租户账号管理租户管理租户创建租户修改租户删除 租户账号管理租户账号创建租户账号修改租户账号删除 客户及客户账号管理客户管理客户创建客户修改客户删除 客户用户管理客户用户创建客户用户修改客户用户删除 …

WPF+Halcon 培训项目实战(6):目标匹配助手

文章目录 前言相关链接项目专栏模板匹配助手简单使用金字塔级别参数自动选择应用插入代码 总结 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想换个工作。相关的教学视频来源于下方的Up主的提供的教程。这里只做笔记分享&#xff0c;想要源码…

2236. 判断根结点是否等于子结点之和 23.12.28(一)

给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于两个子结点值之和&#xff0c;返回 true &#xff0c;否则返回 false 。 示例 1&#xff1a; 输入&#xff1a;root [10,4,6] 输出&#xf…

ssm基于JavaWeb的校园心理健康网站的设计与实现论文

摘 要 如今的时代&#xff0c;是有史以来最好的时代&#xff0c;随着计算机的发展到现在的移动终端的发展&#xff0c;国内目前信息技术已经在世界上遥遥领先&#xff0c;让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…

QT应用篇 二、QML用Image组件实现Progress Bar 的效果

QT应用篇 一、QT上位机串口编程 二、QML用Image组件实现Progress Bar 的效果 三、QML自定义显示SpinBox的加减按键图片及显示值效果 文章目录 QT应用篇前言一、qml需求二、使用组件1.Image组件2.Image中fillMode的使用例子 总结 前言 记录自己学习QML的一些小技巧方便日后查找…

openGauss学习笔记-176 openGauss 数据库运维-实例主备切换

文章目录 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换176.1 操作场景176.2 操作步骤176.3 示例176.4 错误排查176.5 异常处理 openGauss学习笔记-176 openGauss 数据库运维-实例主备切换 176.1 操作场景 openGauss在运行过程中&#xff0c;数据库管理员可能需要…

Arduino stm32 USB CDC虚拟串口使用示例

Arduino stm32 USB CDC虚拟串口使用示例 &#x1f4cd;相关篇《STM32F401RCT6基于Arduino框架点灯程序》&#x1f516;本开发环境基于VSCode PIO&#x1f33f;验证芯片&#xff1a;STM32F401RC⌛USB CDC引脚&#xff1a; PA11、 PA12&#x1f527;platformio.ini配置信息&…

爬虫工作量由小到大的思维转变---<第三十三章 Scrapy Redis 23年8月5日后会遇到的bug)>

前言: 收到回复评论说,按照我之前文章写的: 爬虫工作量由小到大的思维转变---&#xff1c;第三十一章 Scrapy Redis 初启动/conn说明书)&#xff1e;-CSDN博客 在启动scrapy-redis后,往redis丢入url网址的时候遇到: TypeError: ExecutionEngine.crawl() got an unexpected …

归并算法:分治而治的高效算法大揭秘(图文详解)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《数据结构&算法》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 归并算法是我们算法中最常见的算法之一&#xff0c;其思想非常巧妙。本身归并是只能归并有序数组…

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

C# WPF上位机开发(WebApi联调)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很多时候&#xff0c;客户需要开发的不仅仅是一个上位机系统&#xff0c;它还有其他很多配套的系统或设备&#xff0c;比如物流小车、立库、数字孪…

助力城市部件[标石/电杆/光交箱/人井]精细化管理,基于YOLOv7【tiny/yolov7】开发构建生活场景下城市部件检测识别系统

井盖、店杆、光交箱、通信箱、标石等为城市中常见部件&#xff0c;在方便居民生活的同时&#xff0c;因为后期维护的不及时往往会出现一些“井盖吃人”、“线杆、电杆、线缆伤人”事件。造成这类问题的原因是客观的多方面的&#xff0c;这也是城市化进程不断发展进步的过程中难…

ssm基于JavaEE的智能实时疫情监管服务平台的设计与实现+jsp论文

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套智能实时疫情监管服务平台有管…

【第十二课】KMP算法(acwing-831 / c++代码 / 思路 / 视频+博客讲解推荐)

目录 暴力做法 代码如下 KMP算法 不同的next求法-----视频讲解/博客推荐 视频推荐 博客推荐 课本上的方法- prefix的方法- 求next数组思路---next数组存放前缀表的方式 s和p匹配思路 代码如下 暴力做法 遍历s主串中每一个元素&#xff0c;如果该元素等于模板串p中…

经典文献阅读之--MUVO(自动驾驶带几何表征的多模态生成式世界模型)

0. 简介 学习无人监督的自动驾驶世界模型有可能显著提高当今系统的推理能力。然而&#xff0c;大多数工作忽略了世界的物理属性&#xff0c;只关注传感器数据。提出MUVO&#xff0c;一个具有几何体素表示的多模态世界模型。用原始相机和激光雷达数据来学习传感器不可知的世界几…