![](https://file.jishuzhan.net/article/1745416746992406530/45301e9e2759ddf59f66fdf65762a592.webp)
1、k8s简介
k8s官网地址
https://kubernetes.io/zh-cn/docs/home/
![](https://file.jishuzhan.net/article/1745416746992406530/e8b0a4b8f65d9f5d46de89b91cc5d6a5.webp)
2、安装kuboard
详细步骤可参考官网
https://kuboard.cn/install/install-k8s.html
2.1、环境准备
至少 2 台 2核4G 的服务器。
选择v1.19,因为高版本的已经把docker给舍弃掉了。
https://kuboard.cn/install/history-k8s/install-k8s-1.19.x.html
2.2、修改 hostname
主机执行
# 修改 hostname
hostnamectl set-hostname k8master
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
从机执行
# 修改 hostname
hostnamectl set-hostname k8sworker
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
2.3、安装docker及kubelet
主机和从机都要执行
# 在 master 节点和 worker 节点都要执行
# 最后一个参数 1.19.5 用于指定 kubenetes 版本,支持所有 1.19.x 版本的安装
# 腾讯云 docker hub 镜像
# export REGISTRY_MIRROR="https://mirror.ccs.tencentyun.com"
# DaoCloud 镜像
# export REGISTRY_MIRROR="http://f1361db2.m.daocloud.io"
# 华为云镜像
# export REGISTRY_MIRROR="https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com"
# 阿里云 docker hub 镜像
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
2.4、初始化 master 节点
2.4.1、执行初始化脚本
注意只在master节点中执行
# 只在 master 节点执行
# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为 您想要的 dnsName
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5
2.4.2、检查 master 初始化结果
执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
# 只在 master 节点执行
# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
![](https://file.jishuzhan.net/article/1745416746992406530/88ac6b95360b991099831462d11d2fa1.webp)
查看 master 节点初始化结果
# 查看 master 节点初始化结果
kubectl get nodes -o wide
![](https://file.jishuzhan.net/article/1745416746992406530/ddd6840237f2e2c72277ca78c8211aed.webp)
2.5、初始化 worker节点
2.5.1、获得 join命令参数
在 master 节点上执行
# 只在 master 节点执行
kubeadm token create --print-join-command
可获取kubeadm join 命令及参数,如下所示
kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606
2.5.2、初始化worker
针对所有的 worker 节点执行
# 只在 worker 节点执行
# 替换 x.x.x.x 为 master 节点的内网 IP
export MASTER_IP=192.168.88.126
# 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token grrmtv.3dr3rm4vpqr76y9o --discovery-token-ca-cert-hash sha256:5d9753dfa125ea514cbc66d31151eff395ac4364fd91675ad0460a9d6795f606
![](https://file.jishuzhan.net/article/1745416746992406530/3a2ac3d259ef1cf8f903bfebc76c1db7.webp)
2.5.3、检查初始化结果
只在 master 节点执行
# 只在 master 节点执行
kubectl get nodes -o wide
输出结果如下所示:
![](https://file.jishuzhan.net/article/1745416746992406530/d6eb2dd044952ca64df92f57b07e8b0b.webp)
3、安装kuboard图形化管理工具
官方详细步骤地址:
https://kuboard.cn/install/v3/install-in-k8s.html#安装
3.1、执行 Kuboard v3 在 K8S 中的安装
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
3.2、等待 Kuboard v3 就绪
在master节点上执行以下指令,等待 kuboard 名称空间中所有的 Pod 就绪,如下所示
watch kubectl get pods -n kuboard
![](https://file.jishuzhan.net/article/1745416746992406530/63881c9f12a7e9e0604bd7c465c7d39f.webp)
3.3、访问 Kuboard
输入初始用户名和密码,并登录
用户名: admin
密码: Kuboard123
![](https://file.jishuzhan.net/article/1745416746992406530/6cc3ee6efd5c5cae344c2342eaaeecf8.webp)
4、基本操作
4.1、Namespace操作
命名空间是为了隔离各个环境的,比如开发环境叫dev,测试环境叫test等,执行以下语句就能创建一个命名空间
4.1.1、创建命名空间
方式一
kubectl create ns test
方式二
此外还可以通过yml的方式创建,如先创建一个namespace-test.yml,内容如下:
apiVersion: v1
kind: Namespace
metadata:
name: test
kubectl apply -f namespace-test.yml
4.1.2、删除命名空间
kubectl delete ns test
4.1.3、查看所有命名空间
kubectl get ns
4.2、Pod操作
4.2.1、查看pod
查看所有的pod
注意:最后要加上 -A,如果不加,默认查询default命名空间下的pod
kubectl get pods -A
查看指定命名空间的pod
kubectl get pods -n test
4.2.2、运行一个pod
方式一
kubectl run nginx --image=nginx:latest
也可以指定具体的镜像名和命名空间,
例如我们可以到一个国内的镜像站:https://hub.daocloud.io/
下找到nginx对应具体镜像daocloud.io/library/nginx:1.9.1版本进行安装,并指定安装到test命名空间下。
kubectl run nginx --image=daocloud.io/library/nginx:1.9.1 -n test
方式二
此外还可以通过yml的方式创建,如先创建一个pod-test.yml,内容如下,其中containers下可以有多个镜像信息,也就是说一个pod里可以部署多个docker容器:
apiVersion: v1
kind: Pod
metadata:
name: nginx-yml
namespace: test
spec:
containers:
- image: daocloud.io/library/nginx:1.9.1
name: nginx-yml
kubectl apply -f pod-test.yml
查看pod详情可以知道pod内部的ip
kubectl describe pod nginx -n test
得到ip,发现这个ip其实是在步骤2.4.1中POD_SUBNET设定的ip范围。
接着我们可以直接curl 10.100.162.196可看到nginx响应相关信息,但是现在还无法通过外部访问。
![](https://file.jishuzhan.net/article/1745416746992406530/13d1eca04dda0209100306fa0517cb9e.webp)
4.2.3、查看pod的详细信息
以下命令是查看test命名空间下的nginx的pod信息。
kubectl describe pod nginx -n test
4.2.4、进入pod的容器中查看日志
pod里运行的其实是docker容器,通过以下命令查看容器日志:
kubectl logs -f nginx -n test
4.2.5、进入pod中的容器中
kubectl exec -it nginx -n test -- bash
4.2.4、删除pod
以下命令就是把default命名空间下的nginx这个pod删除掉
kubectl delete pod nginx -n default
4.3、图形化界面操作Pod
点击默认集群
![](https://file.jishuzhan.net/article/1745416746992406530/05a603350a03a76aeb00baea39342e6e.webp)
如下图,找到对应的命名空间:
![](https://file.jishuzhan.net/article/1745416746992406530/c8da921540577b23146a74918310a865.webp)
在进入容器组中,能看到容器的信息:
![](https://file.jishuzhan.net/article/1745416746992406530/ad4fb91c70d99e67f001c6946144ec8f.webp)
4.4、Deployment操作
4.4.1、创建一个deployment
方式一
kubectl create deployment deploy-nginx -n test --image=daocloud.io/library/nginx:1.9.1
方式二
通过yml的方式创建管理,更推荐使用这种方式,更方便管理运行。
我们可以到官网摘抄下:
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
首先创建一个deployment-nginx.yml文件
vi deployment-nginx.yml
内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
最后运行以下脚本
kubectl apply -f deployment-nginx.yml
4.4.2、查看deployment
kubectl get deploy -n test
4.4.2、删除deployment
kubectl delete deployment deploy-nginx
4.5、图形化界面操作Deployment
4.5.1、查看容器组
在新增一个deployment后,会默认创建一个pod,我们可以到图形化界面看到
![](https://file.jishuzhan.net/article/1745416746992406530/8021ca3b3f7418914da89185638d65ed.webp)
到工作负载里能看到deployment:
![](https://file.jishuzhan.net/article/1745416746992406530/78921a38eef9e49c07b090359cfacad4.webp)
4.5.2、查看工作负载
进到详情里能看到各种操作按钮
![](https://file.jishuzhan.net/article/1745416746992406530/2b15077425cdf5d05fdf04b6eff41fc7.webp)
4.5.3、自动伸缩pod
如下操作,可快速的伸缩指定deployment下的pod数量:
![](https://file.jishuzhan.net/article/1745416746992406530/f19c47d419214538779a43b740133cc4.webp)
再到容器组里看到多了一个pod
![](https://file.jishuzhan.net/article/1745416746992406530/1fa980a00b8d6391b8ede901a1a13534.webp)
4.6、Service操作
4.6.1、创建Service
4.6.1.1、暴露Deployment生成
要想访问deployment,首先我们需要暴露个端口
kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test
上面脚本的意思是:将命名空间test里deployment为nginx-deployment对外暴露端口,端口为888,映射到pod容器里的nginx端口80。
上面方式只能在服务器内部访问,在浏览器是无法访问的,如果想外部也能访问,需要加type=NodePort参数:
kubectl expose deployment nginx-deployment --port=8888 --target-port=80 -n test --type=NodePort
暴露了之后,生成对应的service
kubectl get service -n test
![](https://file.jishuzhan.net/article/1745416746992406530/bd7b3a90a8f84d123525971a04a91178.webp)
图形化界面也能看到
![](https://file.jishuzhan.net/article/1745416746992406530/d9384551f7080f98fcb15bea9beac8f6.webp)
4.6.1.2、通过yml文件创建
创建一个yml文件
vi deployment-service.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: test
#注意:这里要和Deployment的名称一致
name: nginx-deployment
labels:
app: nginx-deployment
spec:
selector:
#注意:这里要和Deployment的app名称一致
app: nginx
ports:
#Service的端口
- port: 8888
#容器内的端口
targetPort: 80
type: NodePort
执行yml文件
kubectl apply -f deployment-service.yml
执行后可以在图形化界面看到服务了
![](https://file.jishuzhan.net/article/1745416746992406530/6acc00239874967c3b1e446561e96b3b.webp)
4.6.2、查看Service
kubectl get service -n test
![](https://file.jishuzhan.net/article/1745416746992406530/e0d100eb4f3312b02c27eaf597417212.webp)
可以看到Service的ip和端口,请求ip:port,返回nginx信息
curl http://10.96.68.96:8888/
![](https://file.jishuzhan.net/article/1745416746992406530/b9a30dea1959d00065bb476dcbfd6273.webp)
浏览器通过主机ip+外部端口访问:
![](https://file.jishuzhan.net/article/1745416746992406530/2245b80d97ae9d99d1ad3c84fad62840.webp)
4.7、Ingress操作
4.7.1、安装Ingress
如下图,在集群管理->IngressClass菜单进入安装页面
![](https://file.jishuzhan.net/article/1745416746992406530/7807aad285aad3e34c6a8c62d37b05ee.webp)
点击安装弹出如下界面,选择使用私有镜像仓库,点击确定按钮
![](https://file.jishuzhan.net/article/1745416746992406530/c08358ce1bb1ba912ebc39a517e1b526.webp)
安装完之后,容器组进入 Succeeded 或 Running 状态之后,IngressNginxController 就可以正常工作。
![](https://file.jishuzhan.net/article/1745416746992406530/aaf4034fa5dcdca87acf79ca17e5f642.webp)
4.7.2、通过yml创建Ingress
在4.6.1.2步骤中的yml文件追加ingress脚本
vi deployment-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: daocloud.io/library/nginx:1.9.1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
namespace: test
#注意:这里要和Deployment的名称一致
name: nginx-deployment
labels:
app: nginx-deployment
spec:
selector:
#注意:这里要和Deployment的app名称一致
app: nginx
ports:
#Service的端口
- port: 8888
#容器内的端口
targetPort: 80
type: NodePort
---
#apiVersion值必须写成networking.k8s.io/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: test
name: nginx-ingress
spec:
ingressClassName: ingress
rules:
#映射的域名
- host: abc.def.com
http:
paths:
#访问什么样的路径
- path: /
#匹配方式,前缀匹配,即匹配上path配置的斜杠就可以
pathType: Prefix
backend:
#自定用哪个service
service:
name: nginx-deployment
port:
#映射的端口
number: 8888
执行脚本
kubectl apply -f deployment-nginx.yml
![](https://file.jishuzhan.net/article/1745416746992406530/4de098840536488e46d33508e287c5e4.webp)
4.7.3、配置域名访问
C:\Windows\System32\drivers\etc
192.168.88.126 abc.def.com
![](https://file.jishuzhan.net/article/1745416746992406530/80ac69765e5a3462583370f651dfab2c.webp)
![](https://file.jishuzhan.net/article/1745416746992406530/45301e9e2759ddf59f66fdf65762a592.webp)