Kubernetes(K8s 1.28.x)部署---超详细

目录

一、基础环境配置(所有主机均要配置)

1、配置IP地址和主机名、hosts解析

2、关闭防火墙、禁用SELinux

3、安装常用软件

4、配置时间同步

5、禁用Swap分区

6、修改linux的内核参数

7、配置ipvs功能

二、容器环境操作

1、定制软件源

2、安装最新版docker

3、配置docker加速器

4、启动docker

三、cri环境操作

1、cri-dockerd-0.3.4.amd64.tgz 下载

2、解压到指定目录并查看

 3、定制配置文件

4、启动服务

四、harbor仓库操作

1、docker-compose-linux-x86_64下载

2、给权限并解压到创建的目录中

3、加载镜像

4、修改配置文件

5、定制服务启动文件

6、测试

 五、k8s集群初始化

1、定制软件源--所有节点

2、环境部署--所有节点

3、检查镜像文件列表--只在一个节点操作

4、在harbor仓库中创建项目

 5、在master节点上获取镜像文件

6、master节点初始化

7、node节点加入

六、k8s环境收尾操作

1、放到master主机的环境文件中

2、下载kube-flannel.yml

3、编辑脚本并执行

七、扩展:kubectl可以在node节点上运行吗?


一、基础环境配置(所有主机均要配置)

主机名规划:

序号主机ip主机名规划用途
1192.168.226.150kubernetes-master.openlab.cnkubernetes-master
2192.168.226.151kubernetes-node1.openlab.cnkubernetes-node1
3192.168.226.152kubernetes-node2.openlab.cnkubernetes-node2
4192.168.226.153kubernetes-node3.openlab.cnkubernetes-node3
5192.168.226.155kubernetes-register.openlab.cnkubernetes-register

环境准备:Centos7.9    2颗CPU  4G内存   50G硬盘

1、配置IP地址和主机名、hosts解析

主机名修改: 
hostnamectl set-hostname kubernetes-master.openlab.cnhosts解析
[root@localhost ~]# vi /etc/hosts
192.168.226.150 kubernetes-master.openlab.cn kubernetes-master
192.168.226.151 kubernetes-node1.openlab.cn kubernetes-node1
192.168.226.152 kubernetes-node2.openlab.cn kubernetes-node2
192.168.226.153 kubernetes-node3.openlab.cn kubernetes-node3
192.168.226.155 kubernetes-register.openlab.cn kubernetes-register

2、关闭防火墙、禁用SELinux

[root@kubernetes-master ~]# systemctl stop firewalld
[root@kubernetes-master ~]# systemctl disable firewalld
[root@kubernetes-master ~]# sed -i  '/^SELINUX=/ c  SELINUX=disabled' /etc/selinux/config
[root@kubernetes-master ~]# setenforce 0

3、安装常用软件

[root@kubernetes-master ~]# yum install -y wget tree bash-completion lrzsz psmisc net-tools vim

4、配置时间同步

[root@kubernetes-master ~]# yum install chrony -y
[root@kubernetes-master ~]# vim /etc/chrony.conf
...
注释第三行到第六行
:3,6 s/^/#
使用阿里云的时间服务器
server ntp1.aliyun.com iburst启动服务
[root@kubernetes-master ~]# systemctl enable --now chronyd测试
[root@kubernetes-master ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample     
=====================================================================
^* 120.25.115.20                 2   6    17     4   +145us[ +123us]

5、禁用Swap分区

临时禁用
[root@localhost ~]# swapoff -a永久禁用
[root@localhost ~]# sed -i 's/.*swap.*/#&/' /etc/fstab检测:
[root@kubernetes-node1 ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:           1819         385         229           9        1204        1259
Swap:             0           0           0

6、修改linux的内核参数

cat >> /etc/sysctl.d/k8s.conf << EOF#内核参数调整
vm.swappiness=0
#配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF#配置生效
#加载网桥过滤模块
# modprobe br_netfilter
# modprobe overlay#重新加载
[root@kubernetes-master ~]# sysctl -p /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

7、配置ipvs功能

# 1 安装ipset和ipvsadm
[root@kubernetes-master ~]# yum install ipset ipvsadm -y# 2 添加需要加载的模块写入脚本文件
[root@kubernetes-master ~]# cat <<EOF >  /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF# 3 为脚本文件添加执行权限
[root@kubernetes-master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules# 4 执行脚本文件
[root@kubernetes-master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules# 5 查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
[root@kubernetes-master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145458  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

二、容器环境操作

1、定制软件源

[root@kubernetes-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@kubernetes-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装最新版docker

yum install -y docker-ce

3、配置docker加速器

[root@kubernetes-master ~]# cat >> /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": ["http://74f21445.m.daocloud.io","https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["kubernetes-register.openlab.cn"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

4、启动docker

[root@kubernetes-master ~]# systemctl daemon-reload
[root@kubernetes-master ~]# systemctl enable --now docker

三、cri环境操作

1、cri-dockerd-0.3.4.amd64.tgz 下载

地址:Releases · Mirantis/cri-dockerd (github.com)

2、解压到指定目录并查看

[root@kubernetes-master ~]# tar xf cri-dockerd-0.3.4.amd64.tgz -C /usr/local/
[root@kubernetes-master ~]# mv /usr/local/cri-dockerd/cri-dockerd /usr/local/bin/
[root@kubernetes-master ~]# cri-dockerd --version
cri-dockerd 0.3.4 (e88b1605)

 3、定制配置文件

cat > /etc/systemd/system/cri-dockerd.service<<-EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin -
-container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --docker-endpoint=unix:///var/run/docker.sock --
cri-dockerd-root-directory=/var/lib/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOFcat > /etc/systemd/system/cri-dockerd.socket <<-EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF

4、启动服务

启动服务
设置服务开机自启动
[root@kubernetes-master ~]# systemctl daemon-reload
[root@kubernetes-master ~]# systemctl enable --now cri-dockerd.service

四、harbor仓库操作

只在仓库机器上执行

1、docker-compose-linux-x86_64下载

下载地址:Releases · docker/compose · GitHub

2、给权限并解压到创建的目录中

给权限
install -m 755 docker-compose-linux-x86_64 /usr/local/bin/docker-compose创建目录
mkdir -p /data/server解压
tar xf harbor-offline-installer-v2.8.4.tgz -C /data/server/进入目录
cd /data/server/harbor/

3、加载镜像

docker load -i harbor.v2.8.4.tar.gz 

4、修改配置文件

复制文件
cp harbor.yml.tmpl harbor.yml
修改文件
vim harbor.yml修改如下:
hostname: kubernetes-register.openlab.cn
#https:
#  port: 443
#  certificate: /your/certificate/path
#  private_key: /your/private/key/pathharbor_admin_password: 123456
data_volume: /data/server/harbor/data运行
./prepare
./install.sh

5、定制服务启动文件

/etc/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
#需要注意harbor的安装位置
ExecStart=/usr/local/bin/docker-compose --file /data/server/harbor/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose --file /data/server/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target重启
# systemctl daemon-reload
# systemctl enable harbor.service
# systemctl restart harbor

6、测试

只在k8s集群某一个节点
在master

下载镜像
# docker pull busybox
登录仓库
# docker login kubernetes-register.openlab.cn -u admin -p 123456
定制镜像标签
# docker tag busybox:latest kubernetes-register.openlab.cn/library/busybox:latest
推送镜像
# docker push kubernetes-register.openlab.cn/library/busybox:latest

 五、k8s集群初始化

1、定制软件源--所有节点

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

2、环境部署--所有节点

# yum install kubeadm kubectl kubelet -y

3、检查镜像文件列表--只在一个节点操作

kubeadm config images list

4、在harbor仓库中创建项目

网页:http://192.168.226.155

账号:admin 密码:123456

 5、在master节点上获取镜像文件

# cat images.sh 
#!/bin/bash
images=$(kubeadm config images list --kubernetes-version=1.28.0 | awk -F'/' '{print $NF}')
for i in ${images}
dodocker pull registry.aliyuncs.com/google_containers/$idocker tag registry.aliyuncs.com/google_containers/$i kubernetes-register.openlab.cn/google_containers/$idocker push kubernetes-register.openlab.cn/google_containers/$idocker rmi registry.aliyuncs.com/google_containers/$i
done执行脚本文件
sh images.sh

6、master节点初始化

kubeadm init --kubernetes-version=1.28.0 \
####注意修改下面一行的地址为自己的master地址
--apiserver-advertise-address=192.168.226.150 \
--image-repository kubernetes-register.openlab.cn/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=Swap \
--cri-socket=unix:///var/run/cri-dockerd.sock执行之后
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

7、node节点加入

kubeadm join 192.168.226.150:6443 --token jie7an.cr33vmg6iwxu4jod \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--discovery-token-ca-cert-hash sha256:7258022a0aeead42dd63fbcca3e1418df26b2f59f89ffce238066ee22032b435

注意不要直接负责,修改为自己的

六、k8s环境收尾操作

1、放到master主机的环境文件中

echo "source <(kubectl completion bash)" >> ~/.bashrc
echo "source <(kubeadm completion bash)" >> ~/.bashrc
source ~/.bashrc

2、下载kube-flannel.yml

3、编辑脚本并执行

# cat flannel.sh 
#!/bin/bashfor i in $(grep image kube-flannel.yml | grep -v '#' | awk -F '/' '{print $NF}')
dodocker pull flannel/$idocker tag flannel/$i kubernetes-register.openlab.cn/google_containers/$idocker push kubernetes-register.openlab.cn/google_containers/$idocker rmi flannel/$i
done执行脚本文件:sh flannel.sh

4、应用配置文件

sed -i '/ image:/s#docker.io/flannel#kubernetes-register.openlab.cn/google_containers#' kube-flannel.yml应用配置文件
# kubectl apply -f kube-flannel.yml[root@kubernetes-master ~]# kubectl get node
NAME                           STATUS   ROLES           AGE   VERSION
kubernetes-master.openlab.cn   Ready    control-plane   18m   v1.28.0
kubernetes-node1.openlab.cn    Ready    <none>          16m   v1.28.0
kubernetes-node2.openlab.cn    Ready    <none>          16m   v1.28.0
kubernetes-node3.openlab.cn    Ready    <none>          16m   v1.28.0
[root@kubernetes-master ~]# kubectl get pod -n kube-system 
NAME                                                   READY   STATUS    RESTARTS   AGE
coredns-76f899b8cf-f5d5g                               1/1     Running   0          18m
coredns-76f899b8cf-qd5zl                               1/1     Running   0          18m
etcd-kubernetes-master.openlab.cn                      1/1     Running   0          18m
kube-apiserver-kubernetes-master.openlab.cn            1/1     Running   0          18m
kube-controller-manager-kubernetes-master.openlab.cn   1/1     Running   0          18m
kube-proxy-c5lbh                                       1/1     Running   0          18m
kube-proxy-h5s6t                                       1/1     Running   0          16m
kube-proxy-lkpxq                                       1/1     Running   0          16m
kube-proxy-zqbrh                                       1/1     Running   0          16m
kube-scheduler-kubernetes-master.openlab.cn            1/1     Running   0          18m

七、扩展:kubectl可以在node节点上运行吗?

kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

scp  -r  $HOME/.kube   kubernetes-node1.openlab.cn:$HOME/
​scp  -r  $HOME/.kube   kubernetes-node2.openlab.cn:$HOME/
​scp  -r  $HOME/.kube   kubernetes-node3.openlab.cn:$HOME/

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

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

相关文章

色温曲线坐标轴的选取:G/R、G/B还是R/G、B/G ?

海思色温曲线坐标 Mstar色温曲线坐标 高通色温曲线坐标 联咏色温曲线坐标 查看各家白平衡调试界面&#xff0c;比如海思、Mstart、高通等调试资料&#xff0c;白平衡模块都是以R/G B/G作为坐标系的两个坐标轴&#xff0c;也有方案是以G/R G/B作为坐标系的两个坐标轴。 以G/R G…

Fooocus启动时modules报错的解决方法

原理&#xff1a;是由于其他程序的安装导致modules的版本不对&#xff0c;先卸载现有版本&#xff0c;再运行run.bat让其自动安装响应的modules版本。 1、cmd运行windows dos终端。 2、将Fooocus_win64_1-1-1035文件夹备份&#xff0c;rename为Fooocus_win64_1-1-1035backup文…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中&#xff0c;输入是持续的&#xff0c;可以认为在时间上是无界的&#xff0c;也就意味着&#xff0c;永远拿不到全量数据去做计算。同时&#xff0c;计算结果是持续输出的&#xff0c;也即计算结果…

向函数传递参数(传地址)

过往课程 向函数传递参数&#xff08;传值、传引用、传const引用&#xff09; 传地址 向函数传地址&#xff0c;是指将变量的地址传递给函数。 函数通过声明参数为地址变量来接收一个变量的地址。 示例如下&#xff1a; #include <iostream> using namespace std;v…

Mybatis 日志(JDK Log)

上一篇我们介绍了Mybatis中的参数&#xff0c;本篇我们使用JDK Log打印一下Mybatis运行时的日志&#xff0c;看一下Mybatis执行的过程。 这里我选取上一篇的示例进行JDK Log的集成&#xff0c;这里如果您想对上一篇进行详细了解&#xff0c;可以参考&#xff1a; Mybatis参数…

C语言实现顺序表

顺序表 1.线性表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是在物理结构上并不一定是…

WPF怎么实现文件拖放功能winform怎么实现拖拽功能

WPF怎么实现文件拖放功能winform怎么实现文件拖拽功能&#xff0c;在管理员模式下wpf winform怎么实现文件的拖拽功能 WPF实现文件拖放功能&#xff0c;正常情况并没有什么问题&#xff0c;但是如果你的程序使用管理员身份启动&#xff0c;你就会发现文件拖放功能就会失效。同…

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测&#xff0c;上面的要求就是&#xff1a;压测&#xff0c;并发2000 在不熟悉系统的情况下&#xff0c;按目前的需求&#xff0c;需要做的步骤&#xff1a; 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…

恒运资本:市盈率怎么算?

市盈率&#xff08;P/E ratio&#xff09;是判别一家公司股票价格合理性的一个重要目标&#xff0c;也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高&#xff0c;表明相对于公司的收益来说&#xff0c;该公司的股票定价越高。市盈率越低&#xff0c;则表明该股票被低…

App与小程序工具总结

文章目录 前言Burpsuite抓包问题LPosedJustTrustMe 绕过 SSL Pining小程序的反编译APP脱壳&#xff0c;反射大师、frida反射大师Frida 总结 前言 在进行渗透工作的时候&#xff0c;遇到过的App、小程序也不少了&#xff0c;有简单的&#xff0c;也有加固的比较不错的&#xff…

技术深入解析与教程:网络安全技术探秘

第一章&#xff1a;引言 在当今数字化时代&#xff0c;网络安全已经成为了重要议题。随着各种信息和业务在网络上的传输与存储&#xff0c;安全问题也日益突出。本文将带您深入探讨网络安全领域中的关键技术&#xff0c;涵盖渗透测试、漏洞挖掘以及恶意软件分析等方面&#xf…

PCD点云文件外部框框坐标计算

PCD点云文件直接提取的是点云的坐标&#xff0c;不是最外面的box的坐标&#xff0c;因此可以通过&#xff1a; max_b octree.get_max_bound() min_b octree.get_min_bound()分别得到最大最小的xyz坐标&#xff0c;之后进行计算 点的序号和位置对应如下&#xff1a; 所有的…

【数据结构与算法 模版】高频题刷题模版

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【】&#xff0c;使用【】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&#xff1a;目标公…

软考A计划-网络工程师-复习背熟-路由器与交换配置和网络安全

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

ARM DIY(五)摄像头调试

前言 今天&#xff0c;就着摄像头的调试&#xff0c;从嵌入式工程师的角度&#xff0c;介绍如何从无到有&#xff0c;一步一步地调出一款设备。 摄像头型号&#xff1a;OV2640 开发步骤 分为 2 个阶段 5 个步骤 阶段一&#xff1a; 设备树、驱动、硬件 阶段二&#xff1a; 应…

【跟小嘉学 Rust 编程】二十、进阶扩展

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

拿来即用修改密码功能

<template><div><!-- 重置密码 --><el-dialogtitle"修改密码"v-model"state.resetPwdDialogVisible":showClose"state.firstLogin ! 1"width"550px"close"onCancel":close-on-click-modal"false&…

uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

uniapp结合Canvasrenderjs根据经纬度绘制轨迹 文章目录 uniapp结合Canvasrenderjs根据经纬度绘制轨迹效果图templaterenderjsjs数据结构 ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画&#xff0c;需要使用 renderjs 技术&#xff0c;把操作canvas的js逻辑放到视图层运…

Python爬虫框架之Selenium库入门:用Python实现网页自动化测试详解

概要 是否还在为网页测试而烦恼&#xff1f;是否还在为重复的点击、等待而劳累&#xff1f;试试强大的Selenium&#xff01;让你的网页自动化测试变得轻松有趣&#xff01; 一、Selenium库到底是什么&#xff1f; Selenium 是一个强大的自动化测试工具&#xff0c;它可以让你直…

华为 连接OSPF和RIP网络---OSPF和RIP网络相互引入

路由引入简介 不同路由协议之间不能直接共享各自的路由信息&#xff0c;需要依靠配置路由的引入来实现。 获得路由信息一般有3种途径&#xff1a;直连网段、静态配置和路由协议。可以将通过这3种途径获得的路由信息引入到路由协议中&#xff0c;例如&#xff0c;把直连网段引入…