centos7下 k8s的安装 2023年8月6日

2023-11-15

一、基本信息介绍

kubernetes: 1.27.4
系统:centos7
etcd:3.5.7
containerd:1.6.20
runc:1.1.5
建议内核升级到5.10

本次安装就只有一个master和两个个node节点
192.168.2.111 k8s-n1
192.168.2.112 k8s-n2
192.168.2.113 k8s-n3

其中 k8s-n1 是master节点

网络插件:calico 3.26.0 (虽然目前是最新版本,官方文档没显示支持kubernetes1.27,但测试安装可以使用)

二、linux环境调整

为了简单直接root用户登录

1. 设置静态ip,k8s需要固定ip

vi /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=5a26dced-6a7f-405e-bb52-abc83085f30e
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.2.111
NETMASK=255.255.255.0
GATEWAY=192.168.2.2
DNS1=192.168.2.2

2. 设置主机名

hostnamectl set-hostname k8s-n1

3. 本地dns解析

cat >> /etc/hosts << EOF  
192.168.2.111 k8s-n1
192.168.2.112 k8s-n2
192.168.2.113 k8s-n3
EOF

4.关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

5.关闭selinux

sed -i 's/enforcing/0/' /etc/selinux/config
setenforce 0

6、关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab 
swapoff -a 

7、添加内核模块和开启ipv4转发、网桥参数

(1)加载内核模块:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter
(2)添加内核参数

#追加以下内容
cat >> /etc/sysctl.conf << EOF 
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system  #生效

6、时间同步

yum install ntp -y
ntpdate ntp2.aliyun.com
 

三、安装 containerd

kubernetes1.20版本后不在直接由docker daemon处理镜像操作,转为直接与containerd服务交互后,去调用runc去处理镜像操作

1.yum源安装

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum makecache

2.安装containerd

#我安装的版本是 containerd.io.aarch64 0:1.6.22-3.1.el7
yum install containerd.io -y

四、安装kubectl、kubeadm、kubelet

Kubelet:

运行在cluster所有节点上,负责启动POD和容器

Kubeadm:

用于初始化cluster的一个工具

Kubectl:

kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件

直接安装是用的谷歌的源,我们更换为aliyun的源

# x86 架构cpu
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 苹果m1芯片cup
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

 

yum makecache
yum install kubelet  kubeadm  kubectl  -y


如果选错了源,导致yum源缓存了错误的包信息,可以 rm -rf /var/cache/yum/*删除所有的源缓存,重新执行yum makecache

五、修改containerd配置

本步骤node节点也要同样的修改

cp /etc/containerd/config.toml /etc/containerd/config.toml.bak  #备份源文件

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

vi /etc/containerd/config.toml

找到SystemdCgroup = false这一行,将false改为true。

找到包含sandbox_image这一行,将地址改为“registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9”

六、 启动containerd和 kubelet

systemctl enable containerd --now
systemctl enable kubelet --now

如果之前已经启动了 containerd 用下面的命令重启
systemctl restart containerd#重启生效修改后的配置

crictl containerd管理工具配置

执行如下命令:

crictl images list

如果crictl执行出现类似:

WARN[0000] image connect using default endpoints: [unix:///var/run/dockershim.sock unix:///run/containerd/containerd.sock unix:///run/crio/crio.sock unix:///var/run/cri-dockerd.sock]. As the default settings are now deprecated, you should set the endpoint instead. 
ERRO[0002] connect endpoint 'unix:///var/run/dockershim.sock', make sure you are running as root and the endpoint has been started: context deadline exceeded 

这时需要配置crictl,执行如下命令:

cat <<EOF> /etc/crictl.yaml 
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF

七、启动集群

1. 提前拉取主节点需要的镜像

国内镜像下载比较慢,我们可以提前拉取主节点,需要的镜像。这样启动的主节点的时候,就不需要再重新拉取

 #查看会拉取的镜像清单
 kubeadm config images list
 #手动提前拉取镜像,可以看到拉取过程及拉取情况
 kubeadm config images pull
Your Kubernetes control-plane has initialized successfully!
如果拉取不下来,可以去阿里云手动拉取
# 外网下载不下来,用阿里云下载
crictl pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/kube-proxy:v1.27.4
crictl pull registry.aliyuncs.com/google_containers/pause:3.9
crictl pull registry.aliyuncs.com/google_containers/etcd:3.5.7-0
crictl pull registry.aliyuncs.com/google_containers/coredns:v1.10.1

不用担心名称不同,他们的镜像id是一样的,会被k8s识别到

注意版本号要和 kubeadm config images list 列出的一致

2. 启动主节点

1)初始化

kubeadm init \
--apiserver-advertise-address=192.168.2.111 \
--control-plane-endpoint=k8s-n1 \
--image-repository  registry.aliyuncs.com/google_containers \
--kubernetes-version v1.27.4  \
--service-cidr=10.10.0.0/12  \
--pod-network-cidr=10.254.0.0/16

找个地方记录输出中的下面这几行

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
	--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8 \
	--control-plane 

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
	--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8

其中下面这一行,用于向集群中添加主节点

kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
	--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8 \
	--control-plane 

下面这一行,用于向集群中添加从节点

kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
	--discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8
没有记录到添加节点的命令,也没有关系可以用如下命令重新获得。

kubeadm token create --print-join-command

3.检查初始化情况

kubectl get pod -n kube-system

如果出现:couldn’t get current server API group list: Get “http://localhost:8080/api?timeout=32s”: dial tcp 127.0.0.1:8080: connect: connection refused

需要执行下面操作

注意一定要在 kubeadm init 执行完之后,/etc/kubernetes/admin.conf才会产生

方法1:

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

方法2:

sudo vim /etc/profile
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile

在这里插入图片描述

4 添加node节点

在node节点上执行,上面保存的子节点加入命令

kubeadm join k8s-n1:6443 --token nwmhrt.0kty45odiblhi8i8 \
    --discovery-token-ca-cert-hash sha256:85a9863a8444c4800a3dcf647d0cf57147c6eca5037d9fa730c004f25b635ef8

03主节点上执行如下命令,查看节点加入情况

kubectl get nodes

在这里插入图片描述

八.配置集群网络

大家可以注意到,此时的node节点,都是处于NotReady状态,这是因为,我们还没有为集群安装,网络管理插件(也是一个容器)

网络管理插件主流的目前有两种flannel和calico,这里只演示calico。

1.下载calico的压缩包到主节点

以下都是在主节点操作

(1)到https://kgithub.com/projectcalico/calico/releases下去下载release-v3.26.0.tgz
我是直接下载的最新版本

(2) 解压缩

tar xvf elease-v3.26.0.tgz 

(3) 安装镜像

注意这一步不是必须的,只是为了加速部署

# 进入镜像目录
cd elease-v3.26.0/images/
#查看当前kubernetes环境下有哪些镜像
crictl images list
#查看有哪些命名空间,默认导入镜像会到default这个命名空间
ctr namespace list

#安装镜像需要指定导入的命名空间为k8s.io,如果不在image目录下,镜像要写绝对路径,苹果的m1芯片下,往往不会成功,可以跳过这个步骤
ctr --namespace=k8s.io images import calico-kube-controllers.tar
ctr --namespace=k8s.io images import calico-node.tar
ctr --namespace=k8s.io images import calico-cni.tar


crictl image list

查看导入的镜像,见下图
在这里插入图片描述

2.直接用yaml文件创建calico的pod。

# 进入镜像目录
cd elease-v3.26.0/manifests/
# 加载calico的pod到k8s
kubectl apply -f calico.yaml

如果本地没有calico的pod镜像,
k8s会自动下载镜像,只是时间会长一点

查看pod部署情况,看是否都已经,部署ok

kubectl get pods -n kube-system
在这里插入图片描述

此时查看节点情况,会发现节点都已经ready了

kubectl get nodes

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos7下 k8s的安装 2023年8月6日 的相关文章

随机推荐

  • 面试题 : Top-k问题

    目录 简介 题目 示例 提示 开始解题 1 思路 2 解题代码 3 时间复杂度 4 运行结果 编辑 目前问题 真正的解法 1 以找前K个最大的元素为例 2 代码执行过程 时间复杂度的计算 3 画图演示代码执行过程 4 解题代码 两种解法的比
  • webpack3 配置详解

    今天详细的学习了webpack3 下面贴出我的主要配置代码给后来人一些参考 Created by shanpengfei051 on 2018 1 3 const path require path const uglify require
  • H264编码原理(I帧B帧P帧)

    I帧B帧P帧 编码帧的分类 I帧 intraframe frame 关键帧 采用帧内压缩技术 IDR帧属于I帧 每个GOP组中第一帧肯定是I帧 而且还是一种特殊的I帧 也可以称为IDR帧 一个GOP中可能有很多I帧 但是只有一个IDR帧 如
  • MySQL 行转列 列转行

    转载 mysql 行转列 列转行 行转列 准备数据 CREATE TABLE tb score id INT 11 NOT NULL auto increment userid VARCHAR 20 NOT NULL COMMENT 用户i
  • centos7安装apache

    centos7安装apache 第一步 检查是否有旧版本的apache 有就卸载 rpm qa grep httpd 因为我没有 就没有卸载的动作 第二步 安装apache yum install httpd 默认yes 可以添加参数 y
  • Linux环境下安装ssh2模块

    环境 Linux环境 Centos or RedHat 1 确认环境已安装php 5 rpm qa grep php 5 php 5 3 3 48 el6 8 x86 64 2 安装ssh2所依赖的rpm包如下图灰色部分显示 安装顺序可以按
  • Less-22 Cookie Injection- Error Based- Double Quotes - string (基于错误的双引号字符型Cookie注入)

    这关和上一关类似 只不过把单引号注入改成了双引号 看题目 尝试取消报错 成功 发现and后面的条件真假回显会不同 所以我们同样有很多的方法去注入 详见第二十关 这里我们使用联合查询 其他方法自行进行解码 很简单 结束
  • cocos2d-x 物理世界与spine骨骼的运用

    Head ifndef HELLOWORLD SCENE H define HELLOWORLD SCENE H include cocos2d h include spine spine h include E tesetspine co
  • 第四部分、JEECG-BOOT 微服部署文档

    文章目录 第四部分 微服部署文档 微服务部署 一 制作各个服务JAR包 二 配置host 三 初始化Mysql数据库 四 启动微服务各个组件 五 前端部署 六 其他软件安装 第四部分 微服部署文档 微服务部署 后端服务通过JAR方式运行 支
  • JAVA中的比较器

    引出 传统的对象之间是一般都是 或者 看对象是否为同一个 而没有存在 gt 或者 lt 类似的 但有的时候我们需要根据 对象的某一个属性进行排序 怎么办呢 这个时候就引出来 比较器了 主要是两个接口 Comparable和Comparato
  • python 获取指定文件夹里面的图片文件的信息

    import time import exifread import os 切换到图片文件夹 由于我的这个文件夹里全部是图片文件所以无需判断直接遍历 os chdir news aa 遍历所有图片文件 for x y z in os wal
  • 简单的动态规划——装箱问题

    装箱问题 告诉你箱子的容积为多少 告诉你有N件物品和每一件物品的体积 问如何选择物品才能令箱子的剩余容积最小 搜索递归 include
  • spring动态修改bean

    spring动态修改bean RequestMapping ok public Object test2 ApplicationContext applicationContext SpringContextUtil getApplicat
  • android canvas 转bitmap_Android 雪花飘落动画效果 自定义View

    在码农的世界里 优美的应用体验 来源于程序员对细节的处理以及自我要求的境界 年轻人也是忙忙碌碌的码农中一员 每天 每周 都会留下一些脚印 就是这些创作的内容 有一种执着 就是不知为什么 如果你迷茫 不妨来瞅瞅码农的轨迹 本文章实现的效果如下
  • SpringBoot常用定时器库整合(Java Timer、线程池、Quartz、Task)

    简介 定时器可用于做数据统计 年度报表 定时刷新token等 本章主要描述以下常用定时器库的用法 1 Java Timer 2 Java 线程池 3 Quartz 4 Spring Task Java Timer定时器用法 在java中自带
  • 测度与积分 Measures and Integration学习笔记

    学习笔记1 可测空间 可测空间 Measurable Spaces sigma algebra 希望能坚持学习下去 可测空间 Measurable Spaces
  • delphi测试服务器响应时间,TIdHttp.Post响应时间太长

    我正在使用Delphi XE6 我已阅读以下所有内容 我知道相关时间和性能因素包括 1 HTTPOptions 2 TIdHttp Request选项 内容类型 编码 尤其是连接超时设置 3 iCsslIOHandler SSLOption
  • 多层感知器介绍

    一 概览 现实世界中很多真实的问题都不是线性可分的 即无法使用一条直线 平面或者超平面分割不同的类别 其中典型的例子是异或问题 Exclusive OR XOR 即假设输入为x1和x2 如果它们相同 即当x1 0 x2 0或x1 1 x2
  • Oracle19c数据库服务

    本节整理了Oracle在Windows下运行所安装的服务 桌面点击 我的电脑 管理 服务和应用程序 服务 进入下图界面 然后找到以Ora字段开头的服务就是Oracle的服务 如下图 1 OracleJobSchedulerORCL 描述 O
  • centos7下 k8s的安装 2023年8月6日

    一 基本信息介绍 kubernetes 1 27 4 系统 centos7 etcd 3 5 7 containerd 1 6 20 runc 1 1 5 建议内核升级到5 10 本次安装就只有一个master和两个个node节点 192