【实验环境】
rockylinxu 8.10
实验机器三台
192.168.80.31 lyc-80-31 master
192.168.80.32 lyc-80-32 worker
192.168.80.33 lyc-80-33 worker
系统初始化,系统关闭selinux/关闭firewalld清空iptables防火墙规则
k0s很适合用于新版本的测试使用,很方便进行集群的搭建和测试
一、k0s介绍
k0s 是一个开源、包罗万象的 Kubernetes 发行版,它配置了构建 Kubernetes集群所需的所有功能。
由于其简单的设计、灵活的部署选项和适度的系统要求。
1.任何云
2.裸机
3.边缘和物联网
k0s 大大降低了安装和运行 CNCF 认证的 Kubernetes 发行版的复杂性。
借助 k0s,新集群可以在几分钟内启动,开发人员的阻力降至零。
这使得任何没有特殊技能或 Kubernetes 专业知识的人都可以轻松上手。
k0s 作为单个二进制文件分发,除了主机操作系统内核之外,与主机操作系统的依赖性为零。
它适用于任何 Linux,无需额外的软件包或配置。
任何安全或性能问题都可以直接在 k0s 发行版中修复。
这使得保持集群最新和安全变得非常简单。
官方文档地址
https://docs.k0sproject.io/v1.30.0+k0s.0/
系统部署要求
https://docs.k0sproject.io/v1.30.0+k0s.0/system-requirements/
二、下载并配置运行环境
1、下载k0s安装包
下载k0s文件
wget https://github.com/k0sproject/k0s/releases/download/v1.31.2%2Bk0s.0/k0s-v1.31.2+k0s.0-amd64
下载k0sctl文件
wget https://github.com/k0sproject/k0sctl/releases/download/v0.19.2/k0sctl-linux-amd64
2、配置运行环境并验证版本
chmod +x k0s-v1.31.2+k0s.0-amd64
chmod +x k0sctl-linux-amd64
mv k0sctl-linux-amd64 /usr/local/bin/k0sctl
mv k0s-v1.31.2+k0s.0-amd64 /usr/local/bin/k0s
k0sctl version
k0s version
三、单机部署
3.1下载k0s文件
下载k0s文件
wget https://github.com/k0sproject/k0s/releases/download/v1.31.2%2Bk0s.0/k0s-v1.31.2+k0s.0-amd64
chmod +x k0s-v1.31.2+k0s.0-amd64
mv k0s-v1.31.2+k0s.0-amd64 /usr/bin/k0s
k0s version
3.2安装并启动k0s
k0s install controller --single
sudo systemctl daemon-reload
sudo k0s start
systemctl start k0scontroller.service
systemctl status k0scontroller.service
3.3服务开启代理
#开启魔法,增加代理
vim /etc/systemd/system/k0scontroller.service
----
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,k0s"
----
systemctl daemon-reload
systemctl restart k0scontroller.service
3.4查看集群状态
查看集群
k0s kubectl get node
k0s kubectl get pod -A
k0s kubectl get pod -n kube-system
k0s kubectl get svc
k0s kubectl get ns
k0s kubectl get node -o wide
ps -ef |grep containerd
四、k0s集群部署【3台】
【实验环境】
rockylinxu 8.10
实验机器三台
192.168.80.31 lyc-80-31 master
192.168.80.32 lyc-80-32 worker
192.168.80.33 lyc-80-33 worker
系统初始化,系统关闭selinux/关闭firewalld清空iptables防火墙规则
4.0 k0s 的部署工具介绍
k0sctl是一个用于引导和管理 kes集群的命令行工具。
k0sctl使用SSH连接到提供的主机并收集主机信息,通过配置主机、部署k0s,
然后将 k0s节点连接在一起来形成集群。
使用 k0sctl,您可以以自动且易于重复的方式创建多节点集群。
建议将此方法用于生产集群安装。
4.1配置运行环境并验证版本
chmod +x k0s-v1.31.2+k0s.0-amd64
chmod +x k0sctl-linux-amd64
mv k0sctl-linux-amd64 /usr/local/bin/k0sctl #注意不能放在/usr/bin目录,不然后续会报错
mv k0s-v1.31.2+k0s.0-amd64 /usr/local/bin/k0s #注意不能放在/usr/bin目录,不然后续会报错
k0sctl version
k0s version
4.2查看集群需要的镜像
k0s airgap list-images
---
quay.io/k0sproject/calico-cni:v3.28.2-0
quay.io/k0sproject/calico-kube-controllers:v3.28.2-0
quay.io/k0sproject/calico-node:v3.28.2-0
quay.io/k0sproject/coredns:1.11.3
quay.io/k0sproject/apiserver-network-proxy-agent:v0.30.3
quay.io/k0sproject/kube-proxy:v1.31.2
quay.io/k0sproject/kube-router:v2.2.1-iptables1.8.9-0
quay.io/k0sproject/cni-node:1.3.0-k0s.0
registry.k8s.io/metrics-server/metrics-server:v0.7.2
registry.k8s.io/pause:3.9
4.3生成配置文件【31】
k0sctl init > k0sctl.yaml
vim k0sctl.yaml
---
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:
name: k0s-cluster
spec:
hosts:
- ssh:
address: 192.168.80.71
user: root
port: 22
keyPath: ~/.ssh/id_rsa
role: controller
- ssh:
address: 192.168.80.72
user: root
port: 22
keyPath: ~/.ssh/id_rsa
role: worker
- ssh:
address: 192.168.80.73
user: root
port: 22
keyPath: ~/.ssh/id_rsa
role: worker
---
4.4执行第一次安装
# 此时还未开启魔法,未开代理
#执行安装命令
k0sctl apply --config k0sctl.yaml
# 查看报错日志
cat /root/.cache/k0sctl/k0sctl.log
# 下图是日志报错提示
查看集群pod状态
k0s kubectl get node
k0s kubectl get pod -n kube-system
k0s kubectl get pod -n kube-system -o wide
查看pod后台运行日志
k0s kubectl describe pod -n kube-system
# 可以看到是镜像拉取失败的原因,所以需要开启魔法、开启代理
4.5开启魔法、开启代理
3台机器全部需要开启魔法,开启代理
# 1台master节点添加代理
vim /etc/systemd/system/k0scontroller.service
----
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,k0s"
----
sudo systemctl daemon-reload
service k0scontroller.service restart
# 2台worker节点添加代理
vim /etc/systemd/system/k0sworker.service
--------
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,k0s"
-------
#注意worker节点,每次重新初始化机器,代理信息会自动覆盖消失
sudo systemctl daemon-reload
service k0sworker.service restart
4.6再次进行初始化
查看集群pod状态,如果状态正常,就不用再次初始化
k0s kubectl get pod -A
如果超过3分钟集群状态还异常,我们可以再次执行初始化命令
k0sctl apply --config k0sctl.yaml
查看集群状态
k0s kubectl get node
k0s kubectl get node -o wide
主节点不参与调度的时候是不显示的状态,所以不会显示
查看pod在节点分布
k0s kubectl get pod -n kube-system -o wide
4.7如何将K0s去掉
(1)查找上下文文件
查看集群组件
ps -ef |grep kube
#可以看到71主节点的组件是齐全的 说明集群没有问题
ps -ef |grep k0s
可以看到上下文文件位置 --config=/etc/k0s/k0s.yaml
那么这个到底是不是上下文文件呢,cat后发现,格式并不是上下文文件
(2)登录到一个k8s集群master节点拷贝kubectl文件
#切换到bin目录
cd /usr/bin
#查看需要的文件
ls -ld kubectl
#将文件复制到root目录
cp -ap kubectl /root
压缩kubectl文件
tar -czvf kubectl.tar.gz kubectl
将文件发送到k0s主机的root目录
scp kubectl.tar.gz lyc-80-31:/root
(3)测试拉取的kubectl文件有效性
【回到k0s集群中】
解压kubectl.tar.gz
tar -zxvf kubectl.tar.gz
移动kubectl到系统bin目录
mv kubectl /usr/local/bin
测试
kubectl get node
# 出现图中的报错,只有两个可能
1、找不到集群的上下文文件
2、api-server出错或缺失
这里我们的主节点api-server是正常的,那么就是缺失了上下文文件的问题
(4)生成上下文文件
cd /root
生成上下文文件 k0sctl kubeconfig > kubeconfig
查看生成的上下文文件cat kubeconfig
移动kubeconfig到 /root/.kube/
mkdir /root/.kube/
cd /root/.kube/
mv /root/kubeconfig ./
必须将kubeconfig改成config名字
mv kubeconfig config
(5)验证上下文文件的有效性
#查看pod
kubectl get pod -A
kubectl get pod -n kube-system
kubectl get pod -n kube-system -o wide
#查看node
kubectl get node
kubectl get node -A
kubectl get node -o wide
此时我们发现,之前执行命令需要将k0s加上,现在不用加也可以正常执行k8s命令
kubectl get node -A
这里我们会发现,不显示master节点31,
这是因为k0s集群master节点没有Kube-proxy和kubelet,后续安装nginx会得到验证
五、集群测试
5.1安装metrics、dashboard及nginx
#安装dashboard
kubectl apply -f recommended.yaml
kubectl apply -f dashboard-user.yaml
kubectl -n kubernetes-dashboard create token admin-user
#生成token如下
eyJhbGciOiJSUzI1NiIsImtpZCI6InZkRmhiR2RTbGlYRHRmOGN5RkpieXNzT1RxeGJBT2luU2lGbGlVVllKZE0ifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjIiwic3lzdGVtOmtvbm5lY3Rpdml0eS1zZXJ2ZXIiXSwiZXhwIjoxNzMxMDU4NjgxLCJpYXQiOjE3MzEwNTUwODEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2YyIsImp0aSI6IjNlNGM2ZjJjLTEyYTUtNDZmZS1hYTgzLWVlNGEwNGVkODFjMCIsImt1YmVybmV0ZXMuaW8iOnsibmFtZXNwYWNlIjoia3ViZXJuZXRlcy1kYXNoYm9hcmQiLCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiYWRtaW4tdXNlciIsInVpZCI6ImQ5ZDZkZWQ1LTY1NWMtNDlkMy04NDU3LWJlODQ3OTk1ZDc5NyJ9fSwibmJmIjoxNzMxMDU1MDgxLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.i5BEZ_7yibZGpq4YnJd1dcn2TK_oggIl4CMH41AFzTzBa9WwMxjwrxwFZpgdCcYe3gAelolwbwVTwdrs0Yqa4QOFTmrad1nnm9hp-CnQzOBO8bV8FmU3y8UxWlJFfM3mFRzBm7_RgK3lSyccqGD4NXlu_z-pedQEFfTLJH-VfRfTnPwctXfj9qGB2bB1TdatDwMLUa_Ip3yCMfduEcuTAQK0teuT01V1097_tZISDzqYKGrEiGZW3BtX0PGGClCUW4uR7l4zOP_5QLYAFG2FTzgjcrPyYixX6iJWxejRdy-8l35yEUcsICgizSzsz1S7g6IcCkzgoPnykBQUfsGIyA
#安装nginx
kubectl apply -f nginx-web.yaml
kubectl get pod -A
#查看nginx端口
kubectl get pod -o wide
kubectl get pod,svc
访问http://192.168.80.32:31180/
#查看dashboard端口
kubectl get pod -n kubernetes-dashboard
kubectl get svc -n kubernetes-dashboard
访问 https://192.168.80.31:30001/
我们是不能访问的,因为k0s集群master节点没有Kube-proxy和kubelet
只能访问worker节点
kubectl get pod -A
kubectl get pod -o wide
5.2安装helm、kubesphere
5.2.1安装helm
中文官网 Helm
#在线安装
wget https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz
tar -zxvf helm-v3.5.3-linux-amd64.tar.gz
cd linux-amd64
mv helm /usr/bin/
查看helm版本
helm version
查看帮助
helm --help
5.2.2安装kubesphere
【kubesphere官网】
https://kubesphere.io/zh/docs/v4.1/02-quickstart/01-install-kubesphere/
执行安装命令
helm upgrade --install -n kubesphere-system --create-namespace ks-core https://charts.kubesphere.io/main/ks-core-1.1.2.tgz --debug --wait --set global.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks --set extension.imageRegistry=swr.cn-southwest-2.myhuaweicloud.com/ks
查看k8s集群sc
kubectl get sc
kubectl get pod -A
登录web
http://192.168.80.32:30880
Account: admin
Password: P@88w0rd