Kubernetes--note1-安装部署
·
一 Kubernetes部署
1)构建harbor镜像仓库
1.安装docker
[root@harbor ~]# cat > /etc/yum.repos.d/docker.repo <<EOF
[docker]
name = docker
baseurl = https://mirrors.aliyun.com/docker-ce/linux/rhel/9.6/x86_64/stable/
gpgcheck = 0
EOF
[root@harbor ~]# dnf install docker-ce-3:28.5.2-1.el9 -y
初始化
[root@harbor ~]# vim docker.sh
[root@harbor ~]# cat docker.sh
#!/bin/bash
# Docker 生产环境内核&网络一键优化脚本
# 自动配置:br_netfilter、ip_forward、iptables、开机自启
# 1. 加载内核模块并开机自启
echo "===== 加载网桥内核模块 ====="
echo br_netfilter > /etc/modules-load.d/docker_mod.conf
modprobe -a br_netfilter
# 2. 配置内核网络参数
echo "===== 配置内核转发参数 ====="
cat > /etc/sysctl.d/docker.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 3. 立即生效内核参数
sysctl --system
# 4. 确保 Docker 开启 iptables 管理
echo "===== 优化 Docker 启动参数 ====="
sed -i 's|^ExecStart=.*|ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true|' /usr/lib/systemd/system/docker.service
# 5. 重启 Docker 生效
systemctl daemon-reload
systemctl enable --now docker
systemctl restart docker
echo "===== Docker 优化完成! ====="
docker -v
echo "内核转发状态:"
sysctl net.ipv4.ip_forward
[root@harbor ~]# sh docker.sh
2.生成key
[root@harbor ~]# mkdir /data/certs -p
[root@harbor ~]# openssl req -newkey rsa:4096 \
> -nodes -sha256 -keyout /data/certs/timinglee.org.key \
> -addext "subjectAltName = DNS:reg.timinglee.org" \
> -x509 -days 365 -out /data/certs/timinglee.org.crt
.....+..+...+....+..+...............+.+..+.+.....+....+...+..+++++
.+.......+.....+++++++++++++++++++++++++++++++++++++++++++++*..............+.....+....+........+.........+......+.........+...+................+..+.............+......+...+..+.+.................+......+++++++++++++++++++++++++++++++++++++++++++++*..+.......+........+......+.+..+...+...+......+....+..+.......+......+......+...+........+...+.......+..+.+..+....+...............+........+...+....+...+..+...+...+..........+............+..+...+.+..+..................+....+......+.....+.+.....+...................+..+...+....+....
Common Name (eg, your name or your server's hostname) []:reg.timinglee.org
3.编辑harbor配置文件
[root@harbor ~]# tar zxf harbor-offline-installer-v2.5.4.tgz -C /opt/
[root@harbor ~]# cd /opt/harbor/
[root@harbor harbor]# ls
common.sh harbor.v2.5.4.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml
hostname: reg.timinglee.org
certificate: /data/certs/timinglee.org.crt
private_key: /data/certs/timinglee.org.key
harbor_admin_password: xier
[root@harbor harbor]# ./install.sh --help
Note: Please set hostname and other necessary attributes in harbor.yml first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https.
Please set --with-trivy if needs enable Trivy in Harbor
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
[root@harbor harbor]# ./install.sh --with-chartmuseum
4.启动并验证
[root@harbor harbor]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
[root@harbor harbor]# cp /data/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt
[root@harbor harbor]# vim /etc/hosts
[root@harbor harbor]# systemctl restart docker
[root@harbor harbor]# docker compose up -d
WARN[0000] /opt/harbor/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] up 10/10
✔ Container harbor-log Running 0.0s
✔ Container chartmuseum Started 0.8s
✔ Container harbor-portal Started 1.3s
✔ Container redis Started 1.0s
✔ Container registryctl Started 0.7s
✔ Container harbor-db Started 1.0s
✔ Container registry Started 0.9s
✔ Container harbor-core Started 0.6s
✔ Container nginx Started 0.9s
✔ Container harbor-jobservice Started 0.5s
[root@harbor harbor]# docker login reg.timinglee.org -u admin
Password:
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
Login Succeeded
[root@harbor harbor]#
2)构建部署kubernetes所需主机
| 主机名 | ip | 配置 | 角色 |
|---|---|---|---|
| harbor | 172.25.254.200 | cpu1、mem 1G | harbor仓库 |
| master | 172.25.254.100 | cpu4、mem 4G | master,k8s集群控制节点 |
| node1 | 172.25.254.10 | cpu2、mem 2G | worker,k8s集群工作节点 |
| node2 | 172.25.254.20 | cpu2、mem 2G | worker,k8s集群工作节点 |
1.所有主机配置
关闭swap
systemctl disable --now swap.target
systemctl mask swap.target
sed '/swap/s/^/#/g' -i /etc/fstab
原因:
Swap 就是磁盘分区当内存用(虚拟内存),速度比物理内存慢几百倍
① 性能崩盘
内存不够时,系统把内存数据挪到磁盘 Swap,容器读写瞬间卡死、延迟飙升、卡顿超时。
Docker/Redis/MySQL 都是吃内存、要低延迟的服务,一用 Swap 直接拉胯。
② 资源调度错乱(重点!K8s 刚需)
开启 Swap:系统分不清「物理内存用完了」还是「挪到磁盘了」
容器 OOM(内存溢出)杀进程不准、调度异常、节点负载假低
K8s 官方强制要求必须关闭 Swap,不然 kubelet 直接报错起不来集群
③ 高可用 / 高并发稳定性
企业级服务:宁愿物理内存不够直接崩、告警扩容,也绝不走慢速磁盘 Swap 拖垮整个服务
安装docker
[root@harbor ~]# cd /etc/yum.repos.d/
[root@harbor yum.repos.d]# ll
总用量 16
-rw-r--r-- 1 root root 113 3月 29 11:51 docker.repo
-rw-r--r-- 1 root root 116 1月 15 11:35 epel.repo
-rw-r--r-- 1 root root 358 1月 14 22:04 redhat.repo
-rw-r--r-- 1 root root 146 1月 15 11:36 rhelbendi.repo
[root@harbor yum.repos.d]# for i in 10 20 100; do
scp docker.repo root@172.25.254.$i:/etc/yum.repos.d/
done
Warning: Permanently added '172.25.254.10' (ED25519) to the list of known hosts.
docker.repo 100% 113 161.9KB/s 00:00
Warning: Permanently added '172.25.254.20' (ED25519) to the list of known hosts.
docker.repo 100% 113 266.3KB/s 00:00
Warning: Permanently added '172.25.254.100' (ED25519) to the list of known hosts.
docker.repo 100% 113 276.8KB/s 00:00
[root@harbor yum.repos.d]#
dnf install docker-ce-3:28.5.2-1.el9 -y
[root@harbor ~]# for i in 10 20 100; do scp docker.sh root@172.25.254.$i:/root/; done
docker.sh 100% 1032 219.4KB/s 00:00
docker.sh 100% 1032 228.9KB/s 00:00
docker.sh 100% 1032 3.5MB/s 00:00
[root@harbor ~]#
sh docker.sh
配置可以使用harbor仓库
mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
[root@harbor ~]# for i in 10 20 100; do scp /data/certs/timinglee.org.crt root@172.25.254.$i:/etc/docker/certs.d/reg.timinglee.org/ca.crt; done
timinglee.org.crt 100% 2179 869.0KB/s 00:00
timinglee.org.crt 100% 2179 3.8MB/s 00:00
timinglee.org.crt 100% 2179 4.5MB/s 00:00
[root@harbor ~]#
systemctl enable docker
systemctl restart docker
所有主机配置docker加速器
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://reg.timinglee.org"]
}
EOF
systemctl restart docker
docker info
可以看到
Registry Mirrors:
https://reg.timinglee.org/
所有主机彼此建立解析
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.100 master
172.25.254.10 node1
172.25.254.20 node2
172.25.254.200 reg.timinglee.org
所有主机配置kubernetes安装源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name = kubernetes
baseurl = https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm/
gpgcheck = 0
检测
[root@node1 ~]# dnf list kubelet
正在更新 Subscription Management 软件仓库。
无法读取客户身份
本系统尚未在权利服务器中注册。可使用 "rhc" 或 "subscription-manager" 进行注册。
kubernetes 1.1 kB/s | 12 kB 00:10
可安装的软件包
kubelet.aarch64 1.35.3-150500.1.1 kubernetes
kubelet.ppc64le 1.35.3-150500.1.1 kubernetes
kubelet.s390x 1.35.3-150500.1.1 kubernetes
kubelet.src 1.35.3-150500.1.1 kubernetes
kubelet.x86_64
以上操作完成后重启主机检测swap分区
reboot
swapon -s 没有任何输出表示ok
3)kubernetes的部署
1.安装cri-dockerd(所有主机中安装)
让kubernetes能和容器沟通
[root@master ~]# ll
总用量 11004
-rw-------. 1 root root 1000 1月 14 18:32 anaconda-ks.cfg
-rw-r--r-- 1 root root 11183248 3月 29 15:18 cri-dockerd-0.3.14-3.el8.x86_64.rpm
-rw-r--r-- 1 root root 1032 3月 29 14:46 docker.sh
-rw-r--r-- 1 root root 70188 3月 29 15:18 'libcgroup-0.41-19.el8.x86_64(1).rpm'
[root@master ~]# rpm -ivh *.rpm
警告:libcgroup-0.41-19.el8.x86_64(1).rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 6d745a60: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:libcgroup-0.41-19.el8 ################################# [ 50%]
2:cri-dockerd-3:0.3.14-3.el8 ################################# [100%]
[root@master ~]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64\(1\).rpm root@172.25.254.10:/root/
Warning: Permanently added '172.25.254.10' (ED25519) to the list of known hosts.
cri-dockerd-0.3.14-3.el8.x86_64.rpm 100% 11MB 232.2MB/s 00:00
libcgroup-0.41-19.el8.x86_64(1).rpm 100% 69KB 26.0MB/s 00:00
[root@master ~]# ^C
[root@master ~]# scp cri-dockerd-0.3.14-3.el8.x86_64.rpm libcgroup-0.41-19.el8.x86_64\(1\).rpm root@172.25.254.20:/root/
Warning: Permanently added '172.25.254.20' (ED25519) to the list of known hosts.
cri-dockerd-0.3.14-3.el8.x86_64.rpm 100% 11MB 229.7MB/s 00:00
libcgroup-0.41-19.el8.x86_64(1).rpm 100% 69KB 21.7MB/s 00:00
[root@master ~]# vim /lib/systemd/system/cri-docker.service
10 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=reg.ti minglee.org/k8s/pause:3.10.1
[root@master ~]# systemctl enable --now cri-docker
Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /usr/lib/systemd/system/cri-docker.service.
[root@master ~]# ll /var/run/cri-dockerd.sock
srw-rw---- 1 root docker 0 3月 29 16:58 /var/run/cri-dockerd.sock
2.安装构建kubernetes 集群所需软件
master节点
dnf install kubelet kubeadm kubectl -y systemctl enable --now kubelet.service
node节点
dnf install kubelet kubeadm -y systemctl enable --now kubelet.service
master节点中 kubectl 和kubeadm 补齐
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc [root@master ~]# echo "source <(kubeadm completion bash)" >> ~/.bashrc [root@master ~]# source ~/.bashrc
3.下载kubernetes集群所需镜像
下载镜像
[root@master ~]# kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.35.3 \ --cri-socket=unix:///var/run/cri-dockerd.sock [config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.35.3 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.35.3 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.35.3 [config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.35.3 [config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.13.1 [config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.10.1 [config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.6.6-0
上传镜像到本地harbor
[root@master ~]# docker login reg.timinglee.org -u admin
Password:
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
Login Succeeded
[root@master ~]# docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/google/{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
上传前建立项目k8s
[root@master ~]# docker images --format "{{.Repository}}:{{.Tag}}" | awk -F "/" '/timinglee/{system("docker push "$0)}'

4.在master中初始化kubernetes集群
在master中完成集群初始化
[root@master ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 \ --image-repository reg.timinglee.org/k8s \ --kubernetes-version v1.35.3 \ --cri-socket=unix:///var/run/cri-dockerd.sock .... #每个人不一样,其他主机加入本集群的凭证 kubeadm join 172.25.254.100:6443 --token sve1az.48chk6mejmxk0155 \ --discovery-token-ca-cert-hash sha256:9106231c437bc69a93b826056834105188c1d15ed727a454cf5555e5f8656efd #如果忘记 [root@master ~]# kubeadm token create --print-join-command kubeadm join 172.25.254.100:6443 --token 90lrch.doimzlolqdzq0ucz --discovery-token-ca-cert-hash sha256:9106231c437bc69a93b826056834105188c1d15ed727a454cf5555e5f8656efd #如果初始化出问题 [root@master ~]# kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock #可以重置集群设定
添加kubernets环境变量到本机
[root@master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" > ~/.bash_profile [root@master ~]# source ~/.bash_profile [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane 102s v1.35.3 让 root 用户每次登录服务器时,都能自动加载 Kubernetes 管理员认证配置,从而可以直接使用 kubectl命令管理集群
.bash_profile 是 Linux 登录时自动执行的脚本。
你把这行写进去,就等于告诉系统:
每次我登录 root,都自动设置 KUBECONFIG 环境变量。
环境变量 KUBECONFIG 的作用:
告诉 kubectl 去读取哪个配置文件进行认证
添加node节点到本集群
[root@node2 ~]# kubeadm join 172.25.254.100:6443 --token khe28f.truy56vti7ha92zw --discovery-token-ca-cert-hash sha256:9106231c437bc69a93b826056834105188c1d15ed727a454cf5555e5f8656efd --cri-socket=unix:///var/run/cri-dockerd.sock
[preflight] Running pre-flight checks
[WARNING ContainerRuntimeVersion]: You must update your container runtime to a version that supports the CRI method RuntimeConfig. Falling back to using cgroupDriver from kubelet config will be removed in 1.36. For more information, see https://git.k8s.io/enhancements/keps/sig-node/4033-group-driver-detection-over-cri
[WARNING SystemVerification]: kernel release 5.14.0-570.12.1.el9_6.x86_64 is unsupported. Supported LTS versions from the 5.x series are 5.4, 5.10 and 5.15. Any 6.x version is also supported. For cgroups v2 support, the recommended version is 5.10 or newer
[preflight] Reading configuration from the "kubeadm-config" ConfigMap in namespace "kube-system"...
[preflight] Use 'kubeadm init phase upload-config kubeadm --config your-config-file' to re-upload it.
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/instance-config.yaml"
[patches] Applied patch of type "application/strategic-merge-patch+json" to target "kubeletconfiguration"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-check] Waiting for a healthy kubelet at http://127.0.0.1:10248/healthz. This can take up to 4m0s
[kubelet-check] The kubelet is healthy after 504.851566ms
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
[root@node2 ~]#
#测试
[root@master ~]# kubectl get nodes #可以看到集群中主机但是因为网络插件问题状态是NotReady
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 6m32s v1.35.3
node1 NotReady <none> 58s v1.35.3
node2 NotReady <none> 96s v1.35.3
5.安装网络插件
[root@master ~]# ls
anaconda-ks.cfg flannel-0.28.1.tar libcgroup-0.41-19.el8.x86_64.rpm
cri-dockerd-0.3.14-3.el8.x86_64.rpm kube-flannel.yml
[root@master ~]# docker load -i flannel-0.28.1.tar
[root@master ~]# docker tag ghcr.io/flannel-io/flannel-cni-plugin:v1.9.0-flannel1 reg.timinglee.org/flannel-io/flannel-cni-plugin:v1.9.0-flannel1
[root@master ~]# docker push reg.timinglee.org/flannel-io/flannel-cni-plugin:v1.9.0-flannel1
The push refers to repository [reg.timinglee.org/flannel-io/flannel-cni-plugin]
2c8aa52d4746: Pushed
5aa68bbbc67e: Pushed
v1.9.0-flannel1: digest: sha256:b3d30c221113b30fea3e8a7fccb145e929b097d0319b9eeb6b5a591b10b5c671 size: 739
[root@master ~]# docker tag ghcr.io/flannel-io/flannel:v0.28.1 reg.timinglee.org/flannel-io/flannel:v0.28.1
[root@master ~]# docker push reg.timinglee.org/flannel-io/flannel:v0.28.1
The push refers to repository [reg.timinglee.org/flannel-io/flannel]
5668da16a30b: Pushed
5f70bf18a086: Pushed
00012e17b6cc: Pushed
9738bb9596cf: Pushed
b6233bc105d7: Pushed
03767449b95b: Pushed
9a7d8cf9ff51: Pushed
13a60c10faeb: Pushed
70dc5e033175: Pushed
256f393e029f: Pushed
v0.28.1: digest: sha256:e671adbc267460164555159210066d3304a43e3b5dd85cc0b5b6ad62e83aab52 size: 2414
[root@master ~]# vim kube-flannel.yml
image: flannel-io/flannel:v0.28.1
image: flannel-io/flannel-cni-plugin:v1.9.0-flannel1
image: flannel-io/flannel:v0.28.1
[root@master ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created
serviceaccount/flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
#测试
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane 13m v1.35.3
node1 Ready <none> 9m44s v1.35.3
node2 Ready <none> 9m36s v1.35.3

更多推荐


所有评论(0)