kubernetes 1.27.3 集群部署方案

news2024/11/26 8:29:03

一、准备环境

1.1 Kubernetes 1.27.3 版本集群部署环境准备

1.1.1 主机硬件配置说明

cpu内存硬盘角色主机名系统版本

8C

 8G

 1024GB

master

master01

centos 7.9

 8C

 16G

 1024GB

 worker(node)

 worker01

centos 7.9

 8C

 16G

 1024GB

 worker(node)

 worker02

centos 7.9

1.1.2 主机配置

1.1.2.1 主机名配置

由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为master01;其中2台为worker节点,名称分别为:worker01,worker02

master节点
# hostnamectl set-hostname master01

worker01节点
# hostnamectl set-hostname worker01

worker02节点
# hostnamectl set-hostname worker02

1.1.2.2 主机IP地址配置

1.1.2.3 主机名与IP地址解析

所有集群主机均需要进行配置

# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 master01
192.168.1.111 worker01
192.168.1.112 worker02

1.1.2.4 防火墙配置

所有主机均需要操作。

关闭现有防火墙firewalld
# systemctl disable firewalld
# systemctl stop firewalld
# firewall-cmd --state
not running

1.1.2.5 SELINUX配置

所有主机均需要操作。修改SELinux配置需要重启操作系统。

# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

1.1.2.6 时间同步配置

所有主机均需要操作。最小化安装系统需要安装ntpdate软件。

# crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

1.1.2.7 升级操作系统内核

所有主机均需要操作。

导入elrepo gpg key
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装elrepo YUM源仓库
# yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
# yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64

设置grub2默认引导为0
# grub2-set-default 0

重新生成grub2引导文件
# grub2-mkconfig -o /boot/grub2/grub.cfg

更新后,需要重启,使用升级的内核生效。

# reboot

重启后,需要验证内核是否为更新对应的版本
# uname -r

1.1.2.8 配置内核转发及网桥过滤

所有主机均需要操作。

添加网桥过滤及内核转发配置文件
# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

加载br_netfilter模块
# modprobe br_netfilter

查看是否加载
# lsmod | grep br_netfilter
br_netfilter           22256  0
bridge                151336  1 br_netfilter

1.1.2.9 安装ipset及ipvsadm

所有主机均需要操作。

# 安装ipset及ipvsadm
yum -y install ipset ipvsadm

# 配置ipvsadm模块加载方式
# 添加需要加载的模块
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

授权、运行、检查是否加载
# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

1.1.2.10 关闭SWAP分区

修改完成后需要重启操作系统,如不重启,可临时关闭,命令为swapoff -a

永远关闭swap分区,需要重启操作系统
# cat /etc/fstab
......

# /dev/mapper/centos-swap swap swap defaults 0 0

在上一行中行首添加#

二、容器运行时 Containerd准备

2.1 Containerd准备

2.1.1 Containerd部署文件获取

# wget https://github.com/containerd/containerd/releases/download/v1.7.0/cri-containerd-cni-1.7.0-linux-amd64.tar.gz

# tar xf cri-containerd-cni-1.7.0-linux-amd64.tar.gz -C /

2.1.2 Containerd配置文件生成并修改

# mkdir /etc/containerd

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

# vim /etc/containerd/config.toml

sandbox_image = "registry.k8s.io/pause:3.9" 由3.8修改为3.9

2.1.3 Containerd启动及开机自启动

# systemctl enable --now containerd

验证其版本
# containerd --version

2.2 runc准备

2.2.1 libseccomp准备

# wget https://github.com/opencontainers/runc/releases/download/v1.1.5/libseccomp-2.5.4.tar.gz

# tar xf libseccomp-2.5.4.tar.gz

# cd libseccomp-2.5.4/

# yum install gperf -y

# ./configure && make && make install

# find / -name "libseccomp.so"

2.2.2 runc安装

# wget https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64

# chmod +x runc.amd64

查找containerd安装时已安装的runc所在的位置,然后替换
# which runc

替换containerd安装已安装的runc
# mv runc.amd64 /usr/local/sbin/runc

执行runc命令,如果有命令帮助则为正常
# runc

如果运行runc命令时提示:runc: error while loading shared libraries: libseccomp.so.2: cannot open shared object file: No such file or directory,则表明runc没有找到libseccomp,需要检查libseccomp是否安装,本次安装默认就可以查询到。

三、K8S集群部署

3.1 K8S集群软件YUM源准备

# cat > /etc/yum.repos.d/k8s.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

3.2 K8S集群软件安装

3.2.1 集群软件安装

所有节点均要安装

安装方法-:

默认安装
# yum -y install kubeadm kubelet kubectl
安装方法二:

查看指定版本
# yum list kubeadm.x86_64 --showduplicates | sort -r
# yum list kubelet.x86_64 --showduplicates | sort -r
# yum list kubectl.x86_64 --showduplicates | sort -r


安装指定版本
# yum -y install  kubeadm-1.27.3-0  kubelet-1.27.3-0 kubectl-1.27.3-0

3.2.2 配置kubelet

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。

# vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"


设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
# systemctl enable kubelet

3.3 K8S集群初始化

[root@master01 ~]# kubeadm init --kubernetes-version=v1.27.3 --pod-network-cidr=10.200.0.0/16 --apiserver-advertise-address=192.168.1.110 --cri-socket unix:///var/run/containerd/containerd.sock
[init] Using Kubernetes version: v1.27.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [master01 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.10.160]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [master01 localhost] and IPs [192.168.10.160 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [master01 localhost] and IPs [192.168.10.160 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 20.502191 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node master01 as control-plane by adding the labels: [node-role.kubernetes.io/control-plane node.kubernetes.io/exclude-from-external-load-balancers]
[mark-control-plane] Marking the node master01 as control-plane by adding the taints [node-role.kubernetes.io/control-plane:NoSchedule]
[bootstrap-token] Using token: hd74hg.r8l1pe4tivwyjz73
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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.1.110:6443 --token pm3ekl.y03qqkqxix111zp4 \
--discovery-token-ca-cert-hash sha256:c4aa683f5a5d7dc805e1c7966b8495485ff61cca88537f091c5bd7c996e8dbec
[root@worker01 ~]# mkdir /root/.kube

[root@worker01 ~]# cp -i /etc/kubernetes/admin.conf /root/.kube/config

3.4 工作节点加入集群

[root@worker01 ~]# kubeadm join 192.168.1.110:6443 --token pm3ekl.y03qqkqxix111zp4 \
> --discovery-token-ca-cert-hash sha256:c4aa683f5a5d7dc805e1c7966b8495485ff61cca88537f091c5bd7c996e8dbec --cri-socket unix:///var/run/containerd/containerd.sock
[root@worker02 ~]# kubeadm join 192.168.1.110:6443 --token pm3ekl.y03qqkqxix111zp4 \
> --discovery-token-ca-cert-hash sha256:c4aa683f5a5d7dc805e1c7966b8495485ff61cca88537f091c5bd7c996e8dbec --cri-socket unix:///var/run/containerd/containerd.sock

3.5 验证K8S集群节点是否可用

[root@master01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane 15m v1.27.3
worker01 Ready <none> 13m v1.27.3
worker02 Ready <none> 13m v1.27.3

四、网络插件calico部署

calico访问链接:https://projectcalico.docs.tigera.io/about/about-calico

 
# wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
# wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
# vim custom-resources.yaml


# cat custom-resources.yaml


# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.Installation
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 10.200.0.0/16 修改此行内容为初始化时定义的pod network cidr
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()

---

# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/master/reference/installation/api#operator.tigera.io/v1.APIServer
apiVersion: operator.tigera.io/v1
kind: APIServer
metadata:
name: default
spec: {}
# kubectl create -f tigera-operator.yaml

。。。。。。



# kubectl create -f custom-resources.yaml

installation.operator.tigera.io/default created
apiserver.operator.tigera.io/default created
[root@master01 ~]# kubectl get pods -n calico-system
NAME READY STATUS RESTARTS AGE

calico-kube-controllers-789dc4c76b-7gt8p   1/1     Running   0          9m

calico-node-448bf                          1/1     Running   0          9m

calico-node-4hqt7                          1/1     Running   0          9m

calico-node-4j84d                          1/1     Running   0          9m

calico-typha-55b5588bd6-d7xrf              1/1     Running   0          9m

calico-typha-55b5588bd6-q9jtx              1/1     Running   0          9m

csi-node-driver-6zgps                      2/2     Running   0          9m

csi-node-driver-9zvhr                      2/2     Running   0          9m

csi-node-driver-z2cfp                      2/2     Running   0          9m

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyCVR平台Ehome协议接入,设备管理中出现新增通道按钮的问题优化

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。 有用…

软件测试重要性

导言&#xff1a; 在现代软件开发中&#xff0c;软件测试扮演着确保质量的重要角色。通过对软件系统的验证和验证&#xff0c;软件测试有助于发现潜在的缺陷和问题&#xff0c;并确保软件在部署之前能够达到预期的质量标准。本文将深入探讨软件测试的重要性、测试的类型以及成功…

docker常用功能以及mysql实际使用【推荐】

docker常用功能以及mysql实际使用&#xff1a; 一、docker常用命令&#xff1a; 查看版本 docker -v [rootlocalhost ~]# docker -v Docker version 23.0.4, build f480fb1 [rootlocalhost ~]# 2. 查看 Docker 中已存在的镜像 docker images [rootlocalhost ~]# docker ima…

从零开始制作一个Web蜜罐扫描器(3)

从零开始制作一个Web蜜罐扫描器(2)_luozhonghua2000的博客-CSDN博客 那么经过字典的优化,最终就得到了一份ok的字典,如下所示 基本上都是有效的api,那么字典清洗这一步到这里就算完成了。 有了一份好的字典,准确性的问题就迎刃而解。 。 怎么快速且准确且批量的找到蜜储 这…

jenkins实现easyswoole 持续集成/持续部署

jenkins环境jenkins需要使用root用户启动可通过修改 vim /etc/sysconfig/jenkins改为root,也可直接命令行root启动新增流水线项目安装远程构建插件Generic Webhook Trigger勾选触发远程构建保存之后,访问 /generic-webhook-trigger/invoke?tokeneasyswoole-test,即可自动bui…

IDEA中 application.yaml文件没有绿色的叶子

IDEA中 application.yaml文件没有绿色的叶子 问题背景 前段时间一直在刷算法题和备战考试&#xff0c;忽略了项目方面的锻炼&#xff0c;于是今天就想着来写一个练手的项目&#xff0c;重新熟悉一下技术栈。结果刚搭建一个SpringBoot项目&#xff0c;就发现application.yaml配…

支付宝接入

支付宝接入 python-alipay-sdk pycryptodome一、电脑网站支付 1.1 获取支付宝密钥 沙箱网址 1.APPID 2.应用私钥 3.支付宝公钥1.2 存放密钥 在与 settings.py 的同级目录下创建 pem 文件夹pem 文件夹下创建 app_private_key.pem 和 alipay_public_key.pem app_private_key…

分类模型评估指标详解(二分类、多分类、混淆矩阵)

一 、二分类评估 1.混淆矩阵 (ConfusionMatrix) TP&#xff1a;1的预测为1 (正确的积极) 正确判断 FP&#xff1a;0预测为1 (错误的积极) 错误判断 FN&#xff1a;1预测为0 (正确的消极) 漏判断的 TN&#xff1a;0预测为0 (错误的消极) 成功未判断的 准确率&#xff1a;(a…

Unity使用UGUI划线

Unity 里面虽然提供Linerender绘制线条&#xff0c;但是只能在3D空间划线&#xff0c;有时候需要在UI上绘制指定的线条&#xff0c;柱状图&#xff0c;饼状图等就可以采用下面的方式了。 创建DrawLine&#xff0c;继承MaskableGraphic类&#xff0c;重写OnPopulateMesh(VertexH…

【VirtualBox】win10安装配置 Vbox---超详细 最新 持续更新中

概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、开发环境 VirtualBox 官网开发环境&#xff1a;windows10VirtualBox&#xff1a;VirtualBox7.0…

超级应用App的建设路径:业务功能小程序化

过往硅谷巨头对于「微信」这样的「超级应用」不屑一顾&#xff0c;如今Super App似乎已经成为巨头间的一个新共识&#xff0c;Meta、Snap、Uber等公司逐步将更多功能塞进现有App。 Facebook 做起了约会、招聘&#xff1b;Snap 则实打实学起了微信的「平台战略」&#xff0c;开始…

Java虚拟机(JVM)介绍

JVM是什么 JVM是Java Virtual Machine的缩写。它是一种基于计算设备的规范&#xff0c;是一台虚拟机&#xff0c;即虚构的计算机。 JVM屏蔽了具体操作系统平台的信息&#xff08;显然&#xff0c;就像是我们在电脑上开了个虚拟机一样&#xff09;&#xff0c;当然&#xff0c;J…

js (一)数据类型与判断

数据类型 基本&#xff08;值&#xff09;类型&#xff1a; String 字符串是不可变的 let lang“java”; lang lang “script”; //先销毁再创建 Number 在数值类型中&#xff0c;存在一个特殊数值NaN&#xff0c;意为“不是数值”&#xff0c;用于表示本来要返回数值的…

计算机网络——计算机网络体系结构

文章目录 **1 计算机网络概述****1.1 概念****1.2 组成****1.3 功能****1.4 分类****1.5 性能指标** **2 计算机网络体系结构与参考模型****2.1 计算机网络分层结构****2.2 计算机网络协议&#xff0c;接口&#xff0c;服务的概念****2.3 ISO/OSI参考模型和TCP/IP模型** 1 计算…

操作系统Linux-day02

Linux学习 常见的cmd命令 winR 输入cmd打开窗口 ipconfig 查看ip地址信息ping查看网络连接情况或者网速情况 ping内网&#xff0c;外网&#xff0c;路由cd change directory 切换目录 cd 目录名称 切换到目录下 cd .. 切换到上一级 cd / 切换到根目录 dir 显示目录中的文…

Oracle初级

目录 概念 数据库分类 Oracle 存储结构 安装成功 ​编辑 创建用户和表空间 以超级管理员身份登录 创建表空间 创建用户 给用户授权 查询测试 概念 数据库&#xff08;database&#xff09;: 物理操作系统文件或磁盘的集合。简单来说数据库的意思是数据的集合。 DBM…

基于51单片机的智能照明控制系统

**功能&#xff1a;**基于51单片机的智能照明控制系统&#xff0c;以51系列单片机为核心&#xff0c;使用光敏传感模块(采用ADC0832对光敏电路进行AD转换)、红外传感模块与声敏传感模块组成检测装置&#xff0c;并采用PWM对照明灯的光强度进行控制。 1.本设计分为手动模式和自动…

Python入门自学进阶-Web框架——37、异步IO与scrapy

异步IO&#xff1a; 一个请求多个网址并获取返回值的程序&#xff1a; import requestsurl_list [https://www.baidu.com,https://www.google.com,https://www.bing.com,https://www.sohu.com, ] for url in url_list:print(开始请求&#xff1a;,url)response requests.ge…

B068-项目实战-技术准备-Nosql-redis

目录 概述Redis简介&#xff1a;NoSql分类&#xff1a;Redis是什么特点&#xff08;优势&#xff09;Mysql、Memcached和Redis的比较使用场景 应用安装使用默认客户端redis-cli/命令行操作对value为string类型的常用操作对key的常用操作对list集合的常用操作其他命令行操作 jav…

JavaWeb(1)——HTML、CSS、JS 快速入门

JavaWeb 是使用 Java 技术来构建 Web 应用程序的一种方法。 HTML&#xff08;超文本标记语言&#xff0c;负责网页的结构&#xff09;是一种用于创建网页结构和内容的标记语言。它由一系列标签组成&#xff0c;每个标签都有特定的功能。开发人员可以使用 HTML 来定义页面的结构…