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…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...