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…...
wireshark access/trunk/hybrid报文分析
1,access接口 发送带vlan的报文 wireshark交换机配置 [Huawei-GigabitEthernet0/0/1] [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 100 [Huawei-GigabitEthernet0/0/2]port link-type access [Huawei-Gig…...
C++ Primer Plus----第十二章--类和动态内存分布
本章内容包括:对类成员使用动态内存分配;隐式和显式复制构造函数;隐式和显式重载赋值运算符;在构造函数中使用new所必须完成的工作;使用静态类成员;将定位new运算符用于对象;使用指向对象的指针…...
清理 Oracle Arch 目录中的日志文件
清理Oracle Arch目录中的文件需要遵循以下步骤: 1、登陆Oracle数据库服务器:确保你有权限访问Oracle数据库服务器,并且能够登录到服务器操作系统。 ssh 192.168.1.200 su - oracle2、启动RMAN(Recovery Manager)&…...
PicGo+GitHub搭建免费图床
PicGoGitHub搭建免费图床 步骤 1: 安装 PicGo步骤 2:创建图床仓库步骤 3: 配置 GitHub Token步骤 4: 配置 PicGo步骤 5: 上传图片步骤 6: 访问图片 使用 GitHub 作为图床的优势在于免费、稳定且具有版本控制功能,特别适合个人博客、小型项目等。PicGo作为一个开源的…...
免费在线客服软件推荐:经济实用的客户沟通解决方案
好用的在线客服软件是企业是必不可少的工具,他让企业流程更流畅高效,让客户服务更完善优质。市场上的在线客服软件有很多,说着免费使用的软件也不在少数。今天小编就来推荐一款免费在线客服软件。 不过,我们选择免费在线客服软件…...
leetcode344. 反转字符串
题目描述 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s ["h&quo…...
【js自定义鼠标样式】【js自定义鼠标动画】
文章目录 前言一、效果图二、实现步骤1. 去除原有鼠标样式2. 自定义鼠标样式3. 使用 总结 前言 自定义鼠标形状,自定义鼠标的动画,可以让我们的页面更加有设计感。 当前需求:吧鼠标自定义成一个正方形,鼠标的效果有:和…...
Linux开发工具——gdb篇
Linux下调试工具——gdb 文章目录 makefile自动化构建工具 gdb背景 gdb的使用 常用命令 总结 前言: 编写代码我们使用vim,编译代码我们使用gcc/g,但是我们,不能保证代码没问题,所以调试是必不可少的。与gcc/vim一样&…...
spring状态机
1、概述 Spring State Machine 是一个用于处理状态机逻辑的框架,它提供了一种简洁的方法来定义状 态、转换以及在状态变更时触发的动作。 概念 状态 ( State ) :一个状态机至少要包含两个状态。例如自动门的例子,有 …...
K8S异常处理
一、概述 1、k8s有时候会报错The connection to the server ip:6443 was refused - did you specify the right host or port ,本文档提供几种可能产生该报错的原因和排障思路。 二、发现问题 使用任意Kubectl 命令会报错:The connection to the serv…...
酒店网站建设的重要性/营销方案推广
使用监听器:定时清除map缓存的key value . 配置web.xml:注意位置 <listener> <listener-class> com.my.common.listener.TimerListener </listener-class> </listener> 监听类: public class TimerListener implements Serv…...
网络营销策划总结/seo教程seo入门讲解
环境:win10 matlab r2019b 起因: 安装某matlab工具包时需要使用命令 mex -setup 弹出常见错误,即需要编译器 两种编译器的尝试 由于那道墙的存在,让试错成本变得如此巨大 首先,matlab推荐了两种编译器 1.minggw-w64&…...
dede网站地图路径/100种找客户的方法
Linux查找某个时间内的文件1、 n天内修改的(-ctime)find . -type f -ctime -1| xargs ls –l说明:(1) -type f 只搜索文件,不包含文件夹(2)ctime中的c-change的意思(3)-ctime n: n天前修改的;-ctime –n:n天内修改的&…...
网站排名易下拉教程/网络营销活动推广方式
这次带来的是spring boot redis 实现session共享的教程。在spring boot的文档中,告诉我们添加EnableRedisHttpSession来开启spring session支持,配置如下:Java代码 Configuration EnableRedisHttpSession public class RedisSessionConfi…...
福建城乡建设部网站首页/seo推广培训费用
最近自己开始重新学习java基础了,做java开发不可避免要处理数据库,由于好久不写java了,对idea也有点陌生了。所以这里写篇用jdbc来连接mysql的文章至于mysql怎么装,请自行百度不多说先看代码import java.sql.Connection;import ja…...
yellow日本高清免费中文/点击宝seo
Excel可以获取多种数据库中的数据,在表的引用规则方面也存在一定的差异,在书写SQL查询语句时需要引起注意。下面将介绍几种常用表的引用方法。 1.Excel工作表引用规则 Excel工作表在引用时需要将其包含在方括号内“[]”,同时需要…...