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
EOF

sudo 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/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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 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_CIDR
  value: "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运行

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

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

相关文章

超声波清洗机实测!北柏、希亦、洁盟超声波清洗机哪款清洁强?

眼镜清洗其实是一件非常重要的事情&#xff0c;一定不要忽视&#xff0c;表面看眼镜已经清洗干净了&#xff0c;实际眼镜缝隙中的杂污渍还没清洁到位&#xff0c;时间一长就会非常容易滋生细菌以及长螨虫&#xff01;为了杜绝这种情况发生&#xff0c;大家务必重视起清洗眼镜&a…

SpringBoot2.7.12整合Knife4j

SpringBoot2.7.12整合Knife4j 是什么 Knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案 添加依赖 <!--引入Knife4j的官方start包,该指南选择Spring Boot版本<3.0,开发者需要注意--> <dependency><groupId>com.github.xiaoymin</groupId>&l…

Zookeeper-Zookeeper特性与节点数据类型详解

1.Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂目容易出错的分布式一致性服务封装起来&#xff0c;构成一高效可靠的原语集&…

如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

交换两个数字的三种方法-LeetCode做题总结 344

344. 反转字符串 题解Java知识点交换两个数字的三种方法1、temp2、异或3、 题解 class Solution {public void reverseString(char[] s) {char temp;for(int i0,js.length-1; i<j; i,j--) {temp s[i];s[i] s[j];s[j] temp;}} }Java知识点 交换两个数字的三种方法 1、t…

Flutter BottomSheet 拖动分两段展示

第一段 第二段 实现思路 通过 GestureDetector 的 Drag 方法&#xff0c;动态改变Dialog的高度&#xff0c;通过设置一个最大高度和最小高度分成两层进行展示 实现 常用的展示BottomSheet的方法为 showModalBottomSheet /// 设置最高最好以高度的比例进行设置&#xff0c;方…

3、Git分支操作与团队协作

Git分支操作 1.什么是分支2. 分支的好处3. 分支的操作3.1 查看分支3.2 创建分支3.3 切换分支3.4 修改分支3.5 合并分支3.6 产生和解决冲突 4. 创建分支和切换分支图解5. Git团队协作机制团队内协作跨团队协作 均在git bash中进行操作。事先建好本地工作库 1.什么是分支 在版本…

使用Robot Framework实现多平台自动化测试

基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术&#xff0c;成功打造了通用自动化测试持续集成管理平台&#xff08;以下简称“平台”&#xff09;&#xff0c;显著提高了测试质量和测试用例的执行效率。 01、设计目标 平台通用且支持不同…

3D展2D数学原理

今年早些时候&#xff0c;我为 MAKE 杂志写了一篇教程&#xff0c;介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理&#xff0c;并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub&#xff0c;但我在这里编写了对使这一…

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法&#xff08;MC、Sarsa、Q learning&#xff09;应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例&#xff0c;但请注意&#xff0c;纸牌游戏的规则是不同且非标准的。 2. 为方便描述&#xff0c;过程使用代码截图&#xff0c;文末附链…

三天吃透Spring面试八股文

目录&#xff1a; Spring的优点Spring 用到了哪些设计模式&#xff1f;什么是AOP&#xff1f;AOP有哪些实现方式&#xff1f;Spring AOP的实现原理JDK动态代理和CGLIB动态代理的区别&#xff1f;Spring AOP相关术语Spring通知有哪些类型&#xff1f;什么是IOC&#xff1f;IOC的…

Pytorch简介

1.1 Pytorch的历史 PyTorch是一个由Facebook的人工智能研究团队开发的开源深度学习框架。在2016年发布后&#xff0c;PyTorch很快就因其易用性、灵活性和强大的功能而在科研社区中广受欢迎。下面我们将详细介绍PyTorch的发展历程。 在2016年&#xff0c;Facebook的AI研究团队…

SpringBoot 3.2.0 基于Spring Security+JWT实现动态鉴权

依赖版本 JDK 17 Spring Boot 3.2.0 Spring Security 6.2.0 工程源码&#xff1a;Gitee 为了能够不需要额外配置就能启动项目&#xff0c;看到配置效果。用例采用模拟数据&#xff0c;可自行修改为对应的ORM操作 编写Spring Security基础配置 导入依赖 <properties>&l…

(已解决)(pytorch指定了gpu但还是占用了一点0号gpu)以及错误(cuDNN error: CUDNN_STATUS_INTERNAL_ERROR)

文章目录 错误原因解决问题 错误原因 出现错误cuDNN error: CUDNN_STATUS_INTERNAL_ERROR&#xff0c;从这个名字就可以看出&#xff0c;出错原因其实有可能有很多种&#xff0c;我这里说一种比较常见的&#xff0c;就是&#xff1a;显存不足。 一个困惑点在于&#xff0c;在…

为什么 export 导出一个字面量会报错而使用 export default 不会报错

核心 其实总的来说就是 export 导出的是变量的句柄&#xff08;或者说符号绑定、近似于 C 语言里面的指针&#xff0c;C里面的变量别名&#xff09;&#xff0c;而 export default 导出的是变量的值。 需要注意的是&#xff1a;模块里面的内容只能在模块内部修改&#xff0c;…

联合办公行业即将走向寒冬?如何重拾创业者信心

近年来&#xff0c;联合办公行业固然经历了迅猛发展&#xff0c;但现在似乎遭遇了一个潜在的拐点。面对经济的下行压力&#xff0c;一些人士担忧联合办公行业可能会步入寒冬。就在这个关键时刻&#xff0c;如何重拾创业者的信心成为行业内急需解决的问题。 首先要认识到的是&am…

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题&#xff0c;目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

猪目标检测数据集VOC格式600张

猪是一种常见的哺乳动物&#xff0c;通常被人们认为是肉食动物&#xff0c;但实际上猪是杂食性动物&#xff0c;以植物性食物为主&#xff0c;也有偶尔食肉的习性。猪的体型较大&#xff0c;圆胖的体型和圆润的脸庞使其显得憨态可掬。它们主要通过嗅觉来感知周围环境&#xff0…

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;2&#xff09;需求描述 &#xff08;3&#xff09;界面原型 &#xff08;4&#xff09;数据库设计 &#xff08;5&#xff09;后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…

TinyXml2基础操作大全,tinyxml深度解析,一文精通tinyxml之xml中的操作

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念&#x1f917; 欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2021/12/25&#x1f4c5; 最近更新时…