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(容器运行时接口),常见的容器运行器有:
- containerd
- CRI-O
- Docker(使用 cri-dockerd 适配器来将 Docker 与 Kubernetes 集成)
- 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-address | API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口 |
| image-repository | 镜像拉取的仓库,填写国内镜像源 |
| kubernetes-version | K8s 版本,本文值为 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网络插件产品:
- Flannel(比较常用。简单易用,但缺乏高级功能,例如配置网络策略和防火墙)
- Calico(最常用。高性能、高灵活性、功能强大)
- Weave
- 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运行
相关文章:
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-certi…...
Linux 线程安全 (2)
文章目录 线程同步概念条件变量使用生产消费模型信号量的使用读写锁的使用 Linux 线程安全 (1) 线程同步概念 竞态条件:因为时序问题,而导致程序异常. 饥饿问题:只使用互相锁保证线程安全时,锁资源总被某…...
异或运算^简述
异或运算:^ 两个变量之间异或运算时,其二进制位相同取0,不同取1. 示例:a10 (0b 0000 1010) b3 (0b 0000 0011) a^b9(0b 0000 1001) 据此可以推算异或运算"^"有以下特性: a^a0 (0b 0000 0000)…...
Google Play上架:2023年度总结报告
今天是2023年的最后一个工作日,今天用来总结一下2023年关于谷歌商店上架的相关政策改动和对应的拒审解决方法。 目录 政策更新与改动2023 年 2 月 22 日2023 年 4 月5 日2023 年 7 月 12 日2023 年 10 月 25 日 开发者计划政策拒审邮件内容和解决办法 政策更新与改…...
JAVA进化史: JDK10特性及说明
DK 10(Java Development Kit 10)是Java平台的一个版本,于2018年3月发布。尽管相对于之前的版本,JDK 10的变化较为温和,但仍然引入了一些新特性和改进,以下是其中一些主要特性,并带有相应的示例说…...
第二百三十四回
文章目录 1.概念介绍2.使用方法2.1 NumberPicker2.2 CupertinoPicker 3.示例代码4.内容总结 我们在上一章回中介绍了"如何在任意位置显示PopupMenu"相关的内容,本章回中将介绍如何实现NumberPicker.闲话休提,让我们一起Talk Flutter吧。 1.概念…...
{MySQL} 数据库约束 表的关系 新增删除 修改 查询
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库约束1.1约束类型:1.2 NULL约束1.3unique 唯一约束1.4 DEFAULT:默认值约束1.5 PRIMARY KEY:主键约束1.6 FOREIGN K…...
【JVM】虚拟机的组成+字节码文件组成+类的生命周期
什么是JVM? JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 JVM的功能 1.解释和运行:对字节码文件中的指令实时的解释成机器码让计算机执行。 2.内存管理:自动为对象、方法等分配内存,自动…...
pip 下载太慢的解决办法,pip换国内源,pip换源
用pip安装python包的时候,如果系统没有进行相关设置,则用的源服务器是国外的,在国内访问非常慢,我们需要换成国内的源服务器,pip换源通过如下命令: pip config set global.index-url <源地址> 一、…...
OKCC语音机器人的人机耦合来啦
目前市场上语音机器人的外呼形式基本就分为三种,一种纯AI外呼,第二种也是目前主流的AI外呼转人工。那么第三种也可能是未来的一种趋势,人机耦合,或者也叫人机协同。 那么什么是人机耦合呢? 人机耦合是为真人坐席创造相…...
有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 …...
Java虚拟机中的垃圾回收
2 垃圾回收 2.1 判断一个对象是否可回收 2.1.1 引用计数法 如果一个对象被另一个对象引用,那么它的引用计数加一,如果那个对象不再引用它了,那么引用计数减一。当引用计数为 0 时,该对象就应该被垃圾回收了。 但是下面这种互相…...
Vscode新手安装与使用
安装与版本选择 VS Code 有两个不同的发布渠道:一个是我们经常使用的稳定版(Stable),每个月发布一个主版本;另外一个发布渠道叫做 Insiders,每周一到周五 UTC 时间早上6点从最新的代码发布一个版本&#x…...
以元旦为题的诗词(二)
都放假了吧,都有空了吧,可坐下来好好学学诗词,好好写些诗词了吧,我先来几首,你实在不行,去百度或者小程序搜索《美诗计》写一写 元旦 去年元日落寒灰,今岁清明在此杯 老眼看书如梦寐ÿ…...
饥荒Mod 开发(二一):超大便携背包,超大物品栏,永久保鲜
饥荒Mod 开发(二十):显示打怪伤害值 饥荒Mod 开发(二二):显示物品信息 源码 游戏中的物品栏容量实在太小了,虽然可以放在箱子里面但是真的很不方便,外出一趟不容易看到东西都不能捡。实在是虐心。 游戏中的食物还有变质机制,时间长了就不能吃了,玩这个游戏心里压力真是太…...
js 七种继承方法
目录 1. 第一种方法:原型链继承 2. 第二种方法:构造函数继承(call继承) 3. 第三种方法:组合式继承 4. 第四种方法:拷贝继承 5. 第五种方法:原型式继承 6. 第六种方法...
Unity Shader 实现X光效果
Unity Shader 实现X光效果 Unity Shader 实现实物遮挡外轮廓发光效果第五人格黎明杀机火炬之光 实现方案操作实现立体感优化总结源码 Unity Shader 实现实物遮挡外轮廓发光效果 之前看过《火炬之光》、《黎明杀机》、《第五人格》等不少的游戏里面人物被建筑物遮挡呈现出不同的…...
Android Camera相关类功能整理
1.Camera Java相关类 代码目录:frameworks/base/core/java/android/hardware/camera2/ CameraManager:camera系统服务管理类,用于监测、获取特征值和连接Camera设备。 CameraManager.CameraManagerGlobal:全局camera Manager实例ÿ…...
3、Git分支操作与团队协作
Git分支操作 1.什么是分支2. 分支的好处3. 分支的操作3.1 查看分支3.2 创建分支3.3 切换分支3.4 修改分支3.5 合并分支3.6 产生和解决冲突 4. 创建分支和切换分支图解5. Git团队协作机制团队内协作跨团队协作 均在git bash中进行操作。事先建好本地工作库 1.什么是分支 在版本…...
Linux网卡配置
一、网卡配置 1、目录参数 /etc/syscofig/network-scripts/ifcfg-e*** /etc 目录时Linux系统的配置文件,有相对权限的用户能修改目录,但普通用户都可以访问。 sysconfig /etc/sysyconfig目录包含了Linux的系统配置文件 network-scripts network-scripts…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
