手把手教你从0开始部署Kubernetes(K8s 1.28.x)---超详细

news2024/11/17 14:25:39

目录

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

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.cn

hosts解析
[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'
[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 -m
              total        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.
> #!/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.modu

# 4 执行脚本文件
[root@kubernetes-master ~]# /bin/bash /etc/sysconfig/modules/ipvs.mod

# 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
EOF

cat > /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/path

harbor_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}
do
  docker pull registry.aliyuncs.com/google_containers/$i
  docker tag registry.aliyuncs.com/google_containers/$i kubernetes-register.openlab.cn/google_containers/$i
  docker push kubernetes-register.openlab.cn/google_containers/$i
  docker 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/bash

for i in $(grep image kube-flannel.yml | grep -v '#' | awk -F '/' '{print $NF}')
do
	docker pull flannel/$i
	docker tag flannel/$i kubernetes-register.openlab.cn/google_containers/$i
	docker push kubernetes-register.openlab.cn/google_containers/$i
	docker 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.coloradmin.cn/o/933274.html

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

相关文章

接口测试时遇到接口加密了该如何处理?

对明文编码生成信息摘要&#xff0c;以防止被篡改。比如MD5使用的是Hash算法&#xff0c;无论多长的输入&#xff0c;MD5都会输出长度为128bits的一个串。摘要算法不要秘钥&#xff0c;客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。 对称加密 对称加密…

不同子网络中的通信过程

从输入www.baidu.com经历了什么 一、DNS&#xff08;网址->IP&#xff09; 二、ARP&#xff08;IP->MAC&#xff09; A->B&#xff1a;有数据发送&#xff0c;数据封装ip之后发现没有主机B的mac地址。然后ARP在本网段广播&#xff1a;检查目标地址和源地址是否在同一…

多头自注意力机制的代码实现

文章目录 1、自注意力机制2、多头注意力机制 transformer的整体结构&#xff1a; 1、自注意力机制 自注意力机制如下&#xff1a; 计算过程&#xff1a; 代码如下&#xff1a; class ScaledDotProductAttention(nn.Module):def __init__(self, embed_dim, key_size, value_…

Pandas数据分析教程-描述性统计量

pandas基础介绍-命令模版 描述性统计量pandas 统计函数相关与协方差唯一值&#xff0c;频次统计,成员关系1. Series.unique()2. Series/DataFrame/array.value_counts()3. Series.isin()4. get_indexer() 索引对应转换 本文介绍pandas中一些常用的描述性统计量相关知识&#xf…

【考研数学】线性代数第四章 —— 线性方程组(2,线性方程组的通解 | 理论延伸)

文章目录 引言四、线性方程组的通解4.1 齐次线性方程组4.2 非齐次线性方程组 五、方程组解的理论延伸 引言 承接前文&#xff0c;继续学习线性方程组的内容&#xff0c;从方程组的通解开始。 四、线性方程组的通解 4.1 齐次线性方程组 &#xff08;1&#xff09;基础解系 —…

从“芯”出发,国产IDE来了?网友:VS Code 姊妹款?

点击上方“程序猿技术大咖”&#xff0c;关注并选择“设为星标” 回复“加群”获取入群讨论资格&#xff01; 昨天日本核污水排放刷屏&#xff0c;今天却被一条github issues 霸屏&#xff1a;Vscode&#xff0c;你们是否与中国合作过&#xff1f;&#xff08;Vscode, have you…

22.查找,线性表的查找

目录 一. 查找的基本概念 二. 线性表的查找 &#xff08;1&#xff09;顺序查找&#xff08;线性查找) &#xff08;2&#xff09;折半查找&#xff08;二分或对分查找&#xff09; &#xff08;3&#xff09;分块查找 一. 查找的基本概念 查找表是由同一类型的数据元素(…

深度学习11:Transformer

目录 什么是 Transformer&#xff1f; Encoder Decoder Attention Self-Attention Context-Attention 什么是 Transformer&#xff08;微软研究院笨笨&#xff09; RNN和Transformer区别 Universal Transformer和Transformer 区别 什么是 Transformer&#xff1f; ​ …

python下timer定时器常用的两种实现方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 话不多说&#xff0c;直接开搞&#xff0c;如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 方法一&#xff0c;使用线程中现成的&#xff1a; 这种一般比较常用&#xff0c;特别是在线程中的使用方法&#xff0c;下…

python3GUI--PyQt5打包心得(详细图文演示)

文章目录 一&#xff0e;前言二&#xff0e;准备工作&介绍1.准备2.介绍1.pyinstaller2.pipenv 三&#xff0e;项目打包1.准备2.打包1.打包参数2.虚拟环境 三&#xff0e;总结 一&#xff0e;前言 有朋友私信问我&#xff0c;如何把项目打包和如何减小打包后的文件体积。笔…

HarmonyOS应用开发者高级认证练习题

系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 文章目录 系列文章目录前言一、判断二、单选三、多选 前言 本文所有内容来源于个人进行HarmonyOS应用开发者系列认证的学习过程中所做过的练习题&#xff0c;所有答案均是个人作答&#x…

深度学习4. 循环神经网络 – Recurrent Neural Network | RNN

目录 循环神经网络 – Recurrent Neural Network | RNN 为什么需要 RNN &#xff1f;独特价值是什么&#xff1f; RNN 的基本原理 RNN 的优化算法 RNN 到 LSTM – 长短期记忆网络 从 LSTM 到 GRU RNN 的应用和使用场景 总结 百度百科维基百科 循环神经网络 – Recurre…

css滚动条样式这样修改下很漂亮

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>滚动条样式修改下很漂亮(不支持IE)</title> <style type"text/css"> * { margin: 0; padding: 0; } .box { width: 300px; height: 100px; margin…

Linux系统编程:线程控制

目录 一. 线程的创建 1.1 pthread_create函数 1.2 线程id的本质 二. 多线程中的异常和程序替换 2.1 多线程程序异常 2.2 多线程中的程序替换 三. 线程等待 四. 线程的终止和分离 4.1 线程函数return 4.2 线程取消 pthread_cancel 4.3 线程退出 pthread_exit 4.4 线程…

在编辑器中使用正则

正则是一种文本处理工具&#xff0c;常见的功能有文本验证、文本提取、文本替换、文本切割等。有一些地方说的正则匹配&#xff0c;其实是包括了校验和提取两个功能。 校验常用于验证整个文本的组成是不是符合规则&#xff0c;比如密码规则校验。提取则是从大段的文本中抽取出…

探索AIGC人工智能(Midjourney篇)(二)

文章目录 利用Midjourney进行LOGO设计 用ChatGPT和Midjourney的AI绘画&#xff0c;制作儿童绘本故事 探索Midjourney换脸艺术 添加InsightFaceSwap机器人 Midjourney打造专属动漫头像 ChatGPT Midjourney画一幅水墨画 Midjourney包装设计之美 Midjourney24节气海报插画…

【车载开发系列】常用开发工具一览

【车载开发系列】常用开发工具一览 常用开发工具一览 【车载开发系列】常用开发工具一览一. HexView(十六进制查看编辑器)二. VSB Vehicle Systems Builder三. MULTI IDE四. CANoe五. CANalyzer网络分析测试工具六. CasePlayer2七. Renesas Flash Programmer八. Ecu Spectrum九…

红黑树基础理解

一、数据结构 1.数组 a.内存地址连续&#xff0c;使用之前必须要指定数组长度 b.可以通过下标访问的方式访问成员&#xff0c;查询效率高 c.增删操作会带来性能消耗效率相对差点(要防止数据下标越界的问题&#xff0c;需要动态扩容&#xff09; 2.链表 &#xff1a;单向链表…

ICP算法

一、ICP 迭代最接近点&#xff08;ICP&#xff09;&#xff1a;给定两个点集。估计R&#xff0c;t以对齐两个点。 找到点的对应关系估算R&#xff0c;t基于R&#xff0c;t&#xff0c;计算误差和分数重复执行上述步骤直到收敛 传统ICP&#xff1a;根据距离进行计算&#xff0c…

使用Python统计小说语言描写的字数

说明&#xff1a;最早出现这个需求&#xff0c;来自博主阅读《罪与罚》&#xff0c;书中陀思妥耶夫斯基有太多的语言描述&#xff0c;以至于我想知道这本书中到底出现了多少对白。文本介绍如果使用python程序统计一本书中的对话&#xff0c;角色名称&#xff0c;标点符号。 找…