目录
一,k3s简介
K3s 是一个轻量级的 Kubernetes(K8s)发行版,由 Rancher 开发,专为资源受限环境设计,例如物联网 (IoT) 设备、边缘计算和小型开发环境。K3s 提供了简化的安装和操作体验,同时保持 Kubernetes 的核心功能。
K3s 的主要特点:
- 1, 轻量化: 二进制文件仅约 100 MB,比标准 Kubernetes 更加轻量。
精简了许多不常用的 Kubernetes 组件,例如 Ingress controllers 和存储插件,同时提供选配的插件包。 - 2,易于安装:
单一命令即可启动完整的 Kubernetes 集群:bash curl -sfL https://get.k3s.io | sh -
内置了许多功能,如容器运行时 (Containerd)、网络插件和存储插件,减少了额外的配置需求。 - 3,优化的资源使用: 适用于低性能设备,最低需求仅 512MB 内存和 1 核 CPU。
默认使用 SQLite 作为嵌入式数据库,而非 etcd,可以在小规模环境下显著减少资源消耗。 - 4,内置组件: 包括 CoreDNS、Flannel(网络插件)和 Traefik(Ingress Controller)。
集成了常用的 Helm 和 CRI 工具,简化了扩展功能的使用。 - 5,跨平台支持: 支持 x86_64、ARM64 和 ARMv7 等架构,适配树莓派等 IoT 设备。
- 6,高可用性: 支持高可用集群模式,通过外部数据库(如 MySQL、PostgreSQL)实现多主节点集群。
K3s 的典型使用场景:
- 边缘计算: 在分布式环境中运行,支持边缘设备的工作负载管理。
- IoT 部署: 在低功耗硬件设备上运行微服务或容器化应用。
- 开发和测试环境: 提供简化的 Kubernetes 体验,适合本地开发和轻量测试。
- 小规模生产集群: 可以用作中小企业的 Kubernetes 解决方案,减少运维复杂度。
与 Kubernetes 的主要区别:
特性 | K3s | Kubernetes |
---|---|---|
安装复杂度 | 简单,单命令安装 | 相对复杂,需要配置多个组件 |
资源占用 | 较低,适合低性能环境 | 较高,适合高性能集群 |
数据存储 | 默认 SQLite,可扩展其他数据库 | 默认 etcd |
定位场景 | 资源受限环境、小型集群 | 数据中心、大规模集群 |
K3s 的轻量化特性使其成为在资源有限环境中使用 Kubernetes 的首选工具,同时也为需要快速原型和开发的用户提供了便捷的选择。
二,k3s搭建使用
这里搭建测试两台服务器作为集群:
192.168.203.133(master)ubuntu
192.168.203.134(worker)ubuntu
确保防火墙允许主节点和 Agent 节点之间的通信,特别是以下端口:
6443/TCP(Kubernetes API)
10250/TCP(Kubelet API)
8472/UDP(Flannel VXLAN 网络)
k3s搭建非常检查,一条命令即可。
1,安装与卸载 K3s
Master 节点
192.168.203.133服务器执行命令
sudo curl -sfL https://get.k3s.io | sh -
此命令安装的默认为master(主节点),如果只有一台服务器,作为单节点模式,就搭建完了。
但作为集群,还需要搭建worker节点,所以需要查看node-token给worker节点使用,运行结果如下:
ubuntu@ubuntu:~$ sudo cat /var/lib/rancher/k3s/server/node-token
K10758faf09a207eae4ed4eb9f5489263ffad333543f61a34eedd4df9971bf7bcb...
Worker 节点
根据在master得到的token在worker节点服务器运行。
sudo curl -sfL https://get.k3s.io | K3S_URL=https://<master-node-ip>:6443 K3S_TOKEN=<token> sh -
这里测试为192.168.203.134上运行,所以命令为:
sudo curl -sfL https://get.k3s.io | K3S_URL=https://192.168.203.133:6443 K3S_TOKEN=K10758faf09a207eae4ed4eb9f5489263ffad333543f61a34eedd4df9971bf7bc... sh -
注意:
服务器主机名不能相同,如果服务器名相同,需要加参数 INSTALL_K3S_EXEC=”–with-node-id”标记主机唯一标识,示例:
sudo curl -sfL https://get.k3s.io | K3S_URL=https://192.168.203.133:6443 K3S_TOKEN=K10758faf09a207eae4ed4eb9f5489263ffad333543f61a34eedd4df9971bf7bc... INSTALL_K3S_EXEC="--with-node-id" sh -
对于中国用户,可以用以下镜像加速安装:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
以上就安装完成了,可以用以下命令查看集群是否全部启动:
ubuntu@ubuntu:~$ sudo kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu Ready control-plane,master 3h53m v1.30.6+k3s1
ubuntu-d41c5ee6 Ready <none> 106m v1.30.6+k3s1
卸载 K3s
如果需要卸载,卸载命令:
#master节点:
/usr/local/bin/k3s-uninstall.sh
#worker节点:
/usr/local/bin/k3s-agent-uninstall.sh
2,基本命令操作
查看服务命令
安装完成可以查看k3s服务状态
#master节点:
sudo systemctl status k3s.service
#worker节点:
sudo systemctl status k3s-agent.service
日志查看命令,如果安装有问题,可以查看实时输出日志
#master节点
sudo journalctl -u k3s.service -f
#worker节点
sudo journalctl -u k3s-agent.service -f
Kubernetes 命令(与 kubectl 一致)
K3s 内置了 kubectl,直接使用 kubectl 命令管理集群资源。
检查集群状态
kubectl get nodes
kubectl get pods -A
kubectl get svc -A
查看集群的详细信息
kubectl cluster-info
部署应用
kubectl apply -f <yaml-file>
删除资源
kubectl delete -f <yaml-file>
kubectl delete pod <pod-name>
进入 Pod 调试
kubectl exec -it <pod-name> -- /bin/bash
查看资源详情
kubectl describe pod <pod-name>
kubectl describe svc <svc-name>
三,k3s部署wordpress网站
实践出真知,部署应用才更能熟悉k3s的用法,现在用k3s集群部署一个wordpress网站。
wordpress官方提供直接用的docker 镜像,所以比较简单。
创建一个项目文件夹,所有文件在此文件夹操作
mkdir wordpress
cd wordpress
k3s和docker compose一样都是根据yaml文件来部署应用。
1,部署 MetalLB
MetalLB 是 Kubernetes 的负载均衡器插件,用于为服务分配外部 IP。这里两台,所以用负载均衡处理。
在主服务器上安装 MetalLB:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/main/config/manifests/metallb-native.yaml
配置 MetalLB 的 IP 地址池: 创建 metallb-config.yaml 文件:
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: pool1
namespace: metallb-system
spec:
addresses:
- 192.168.203.133-192.168.203.134
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: adv1
namespace: metallb-system
配置完运行
sudo kubectl apply -f metallb-config.yaml
2,部署 WordPress 和 MySQL
创建 WordPress 和 MySQL 的配置文件 wordpress-deployment.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_USER
value: wordpress_user
- name: WORDPRESS_DB_PASSWORD
value: wordpress_pass
ports:
- containerPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: yourpassword
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress_user
- name: MYSQL_PASSWORD
value: wordpress_pass
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
selector:
app: wordpress
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
clusterIP: None
mysql只需要一个,wordpress两台服务器所以replicas: 2,最后应用配置
sudo kubectl apply -f wordpress-deployment.yaml
3,验证和命令说明
查看 WordPress 的外部 IP( EXTERNAL-IP):
ubuntu@ubuntu:~/wordpress$ sudo kubectl get svc wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress LoadBalancer 10.43.1.225 192.168.203.134 80:31453/TCP 81m
kubectl get svc 是用于查看 Kubernetes 集群中 Service 信息的命令。它可以显示每个服务的名称、类型、集群内 IP 地址、暴露的端口等关键信息。以下是 kubectl get svc 的输出示例及详解:
在浏览器中访问该 IP 地址,即可看到 WordPress 的安装页面。
示例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d
my-service NodePort 10.96.58.137 <none> 8080:30001/TCP 2h
loadbalancer-svc LoadBalancer 10.96.32.53 34.123.45.67 80:31001/TCP 1h
其他字段很好理解,这里讲下 TYPE 字段类型:
TYPE服务的类型,定义了服务的访问方式:
- ClusterIP:仅集群内部访问(默认类型)。
- NodePort:在每个节点的特定端口上暴露服务。
- LoadBalancer:创建外部负载均衡器(仅适用于支持 LoadBalancer 的环境,如云平台)。
- ExternalName:通过 DNS 名称暴露服务。
- Headless Service:没有 Cluster IP 的特殊服务,适用于直接访问 Pod。
其它参数
#1,列出更多信息,增加更多字段,例如服务选择器、标签等。
kubectl get svc -o wide
#2,查看特定命名空间的服务,默认命令只查看当前命名空间的服务,加 -n 可指定特定命名空间。
kubectl get svc -n <namespace>
#3,查看所有命名空间的服务
kubectl get svc --all-namespaces
#4,输出为 YAML/JSON 格式,用于详细分析服务配置或作为模板。
kubectl get svc my-service -o yaml
kubectl get svc my-service -o json
负载均衡效果验证:
通过刷新页面多次请求,WordPress 的两个副本将轮流处理请求,实现负载均衡。可以使用以下命令查看 Pod 的运行情况:
ubuntu@ubuntu:~/wordpress$ sudo kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-c59dbc976-sskvl 1/1 Running 0 39s 10.42.1.52 ubuntu-d41c5ee6 <none> <none>
wordpress-66d68f4cd8-dw776 1/1 Running 0 39s 10.42.1.50 ubuntu-d41c5ee6 <none> <none>
wordpress-66d68f4cd8-g59bc 1/1 Running 0 39s 10.42.0.50 ubuntu <none> <none>
kubectl get pods 是用于查看 Kubernetes 集群中 Pod 信息的命令。Pod 是 Kubernetes 中最小的部署单元,kubectl get pods 命令提供了每个 Pod 的状态、节点位置、重启次数等信息。
常用参数选项:
# 1,列出所有命名空间的 Pod,输出中会包含命名空间信息。
kubectl get pods --all-namespaces
# 2,列出某一命名空间的 Pod
kubectl get pods -n <namespace>
# 3,查看详细信息,包括 Pod 的事件、节点信息、IP、容器状态等。
kubectl describe pod <pod-name>
# 4,查看带标签的 Pod,例如,kubectl get pods -l app=nginx 列出带有标签 app=nginx 的 Pod。
kubectl get pods -l <label-key>=<label-value>
# 5,输出为 YAML/JSON,用于分析配置或备份。
kubectl get pod <pod-name> -o yaml
kubectl get pod <pod-name> -o json
# 6,附加更多列,显示额外信息,例如节点名称、Pod IP、所属节点。
kubectl get pods -o wide
4,NodePort 模式(扩展)
以上虽然实现了负载均衡,但有个问题。
如果分配给外部访问的 IP 地址绑定在某台服务器上,而该服务器宕机,则整个负载均衡服务将失效。这是因为外部 IP 通常是通过负载均衡器(如 MetalLB)绑定到一个节点的,如果该节点不可用,流量无法路由到其他节点上的 Pod。
为了确保外部 IP 地址仍然可用,即使某台服务器宕机,也能访问服务,可以考虑以下方法:
1,配置 MetalLB 的高可用模式(推荐 BGP 模式)。
需要设置至少两台支持 BGP 的路由器(或其他 BGP 设备)来提供高可用性。
2,在集群外使用双负载均衡器。
3,改用 NodePort 模式,通过多个节点直接访问服务。
这里主要演示NodePort模式:
编写配置服务wordpress-nodeport-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: NodePort
selector:
app: wordpress
ports:
- port: 80 # 服务暴露的端口(集群内访问的端口)
targetPort: 80 # Pod 内服务的端口
nodePort: 30080 # 集群节点上暴露的端口(指定范围为 30000-32767),如果去掉这行,则自动分配端口。
应用配置
sudo kubectl apply -f wordpress-nodeport-service.yaml
验证服务状态。
ubuntu@ubuntu:~/wordpress$ sudo kubectl get svc wordpress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress NodePort 10.43.134.23 <none> 80:30080/TCP 20m
访问服务,浏览器分别访问,都正常:
http://192.168.203.133:30080
http://192.168.203.134:30080
完整的架构,可以在外部用一个nginx配置域名,用负载均衡分别访问两台服务器即可。
5,Ingress 模式(扩展)
5.1,简介
Ingress: 是 Kubernetes 中的一种资源类型,本身不是一个工具,而是 Kubernetes 中的一个抽象概念,定义了 HTTP(S) 路由规则,用于将外部流量路由到 Kubernetes 集群内的服务。通过Ingress 控制器(Ingress Controller)负责实现这些路由规则并处理流量。
简单来说,Ingress就是通过域名访问,不能简单的通过IP或者端口访问。
Ingress Controller:控制组件,有nginx和Traefik 两种,k3s默认安装有Traefik,可更加命令查看是否安装,如下:traefik-d7c9c5778-4dfmf 默认已经安装完成。
ubuntu@ubuntu:~/wordpress$ sudo kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7b98449c4-nnzf6 1/1 Running 2 (3h27m ago) 5d4h
helm-install-traefik-68kb8 0/1 Completed 2 5d4h
helm-install-traefik-crd-g9gmw 0/1 Completed 0 5d4h
local-path-provisioner-595dcfc56f-hkrqk 1/1 Running 2 (3h27m ago) 5d4h
metrics-server-7d794db65c-8jrd4 1/1 Running 0 3h42m
svclb-traefik-0b4e3b70-4f4tv 2/2 Running 2 (22h ago) 5d2h
svclb-traefik-0b4e3b70-rdhlw 2/2 Running 4 (3h27m ago) 5d4h
traefik-d7c9c5778-4dfmf 1/1 Running 2 (3h27m ago) 5d4h
5.2,部署
默认有Traefik,现在只需要用Traefik定义一个基础的 Ingress,让 Traefik 路由 HTTP 流量到我们的服务。
创建一个名为 wordpress-ingress.yaml 的文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: wordpress.example.com # 替换为你的域名或裸 IP
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
traefik.ingress.kubernetes.io/router.entrypoints: web:指定使用 web 入口点(默认监听 HTTP 流量)。
应用配置:
sudo kubectl apply -f wordpress-ingress.yaml
原来的wordpress-deployment.yaml配置也需要改, type: LoadBalancer
改成 type: ClusterIP 即可。
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
selector:
app: wordpress
ports:
- protocol: TCP
port: 80
targetPort: 80
#type: LoadBalancer
type: ClusterIP
应用配置:
sudo kubectl apply -f wordpress-deployment.yaml
验证配置,查看 Ingress 路由是否配置成功:
ubuntu@ubuntu:~/wordpress$ sudo kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
wordpress-ingress traefik wordpress.example.com 192.168.203.133 80 56s
由于在本地测试,没有域名,所以在hosts配置好模拟域名配置。
192.168.203.133 wordpress.example.com
然后在浏览器中访问 http://wordpress.example.com,可正常访问。直接IP是不可访问的。
5.3,让 Traefik 自动申请 TLS 证书(扩展)
Traefik 支持自动通过 Let’s Encrypt 申请 TLS 证书,并配置 HTTPS。你需要更新 Traefik 的配置以启用 ACME(Automatic Certificate Management Environment)。
此方式仅支持实际域名的证书申请。
配置 Traefik 动态文件
创建一个名为 traefik-values.yaml 的文件,用于 Helm 安装或更新 Traefik。
certificatesResolvers:
letsencrypt:
acme:
email: [email protected] # 替换为你的电子邮件
storage: /data/acme.json # 用于存储证书的路径
httpChallenge:
entryPoint: web # 使用 HTTP-01 挑战验证域名
- email:用于注册 Let’s Encrypt 账号。
- storage:证书将存储在 Traefik Pod 的 /data/acme.json 文件中。
- httpChallenge:使用 HTTP-01 验证域名的所有权。
将这个文件应用到 Traefik:
helm upgrade --namespace kube-system traefik traefik/traefik -f traefik-values.yaml
更新 Ingress 配置
修改 Ingress 文件以启用 HTTPS:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
spec:
rules:
- host: wordpress.example.com # 替换为你的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
tls:
- hosts:
- wordpress.example.com
traefik.ingress.kubernetes.io/router.tls.certresolver:指定使用 letsencrypt 解决器申请证书。
tls 部分:声明为域名启用 TLS。
验证 TLS 配置:
#部署更新后的 Ingress:
kubectl apply -f wordpress-ingress.yaml
#确认证书生成:会看到 Traefik 自动通过 Let's Encrypt 申请证书的日志。
kubectl logs -n kube-system <traefik-pod-name>
测试 HTTPS 访问: 打开浏览器,访问 https://wordpress.example.com,应看到 WordPress 的页面。
四,配置文件说明及其他工具
1,yaml文件简要说明:
以上k3s的yaml文件说明,文件主要分3部分,及kind申明部分。
1:PVC(PersistentVolumeClaim): 申请和绑定存储卷。
2:Deployment: 定义 MySQL 容器、环境变量及持久化配置。
3:Service: 提供 MySQL 的网络访问。
Namespace: 资源隔离,确保所有资源都在单独的命名空间中。
yaml 申明部分根据需要来决定是否需要:
PersistentVolumeClaim: 需要持久化存储时才必需。
Deployment: 推荐用于管理应用副本、滚动更新,但不绝对必须。
Service: 推荐用于暴露网络服务,但如果无需网络访问可以省略。
如其他部署常见场景:
无状态服务,如前端服务或简单的 API 服务:
通常需要 Deployment 管理 Pod 副本,Service 用于网络访问。
不需要 PVC,因为无状态服务不存储数据,示例nginx部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
单 Pod 测试,只需临时运行一个应用进行调试:
仅需要 Pod,不需要 Deployment 和 Service。
持久化存储是否需要视具体情况,nginx部署示例:
apiVersion: v1
kind: Pod
metadata:
name: nginx-test
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
2,Kubernetes Dashboard
在 Kubernetes 中使用 Dashboard 和 Traefik 来管理和配置服务,结合 Ingress 和负载均衡功能,可以实现通过 Web 界面轻松管理资源。
部署 Kubernetes Dashboard
使用官方提供的 YAML 文件部署 Dashboard:
sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
安装完可以查看插件是否安装完成:
ubuntu@ubuntu:~/wordpress$ sudo kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-795895d745-t9lz9 1/1 Running 0 3m49s
kubernetes-dashboard-56cf4b97c5-hwlpg 1/1 Running 0 3m49s
Dashboard 默认使用严格的 RBAC 权限,需要为用户分配访问权限。
创建一个admin-user.yaml 和绑定 cluster-admin 角色:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
应用配置:
sudo kubectl apply -f admin-user.yaml
获取访问 Token
生成并查看 admin-user 的访问 Token:
sudo kubectl -n kubernetes-dashboard create token admin-user
访问配置
1:通过节点 IP 和端口访问 Dashboard
如果希望通过节点 IP 和端口访问 Dashboard,可以将 Service 类型改为 NodePort。
#编辑 kubernetes-dashboard 服务:将 type: ClusterIP 修改为:type: NodePort
sudo kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
#保存退出后,获取 NodePort:
ubuntu@ubuntu:~/wordpress$ sudo kubectl -n kubernetes-dashboard get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.43.89.95 <none> 8000/TCP 61m
kubernetes-dashboard NodePort 10.43.115.108 <none> 443:32250/TCP 61m
通过服务器加端口32250即可访问,注必须是https才能访问。
2,配置 Traefik 以暴露 Dashboard
配置 Dashboard 的 Ingress
默认情况下,Dashboard 暴露为 ClusterIP 服务,仅在集群内部访问。你可以通过 Traefik 的 Ingress 将其暴露到外部。
创建 dashboard-ingress.yaml 文件:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard-ingress
namespace: kubernetes-dashboard
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
spec:
rules:
- host: dashboard.example.com # 替换为你的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
tls:
- hosts:
- dashboard.example.com
namespace: kubernetes-dashboard:确保 Ingress 和 Dashboard 服务在同一命名空间中。
应用配置:
sudo kubectl apply -f dashboard-ingress.yaml
验证查看ingress配置。
ubuntu@ubuntu:~/wordpress$ sudo kubectl get ingress -n kubernetes-dashboard
NAME CLASS HOSTS ADDRESS PORTS AGE
kubernetes-dashboard-ingress traefik dashboard.example.com 192.168.203.133 80, 443 8s
配置hosts
192.168.203.133 dashboard.example.com
注:dashboard 默认必须使用https,所以如果有域名,申请ssl签证,才可以访问。
如果不使用ssl,需要更改默认的traefik.yaml 配置跳过ssl认证,此配置为全局配置,意味着所有使用Ingress服务的都跳过了ssl认证。所以仅测试使用,测试完成在改回来。或者确实不需要自签证书使用。
配置文件位置:
vim /var/lib/rancher/k3s/server/manifests/traefik.yaml
加上字段,globalArguments: – “–serversTransport.insecureSkipVerify=true”
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: traefik
namespace: kube-system
spec:
chart: https://%{KUBERNETES_API}%/static/charts/traefik-27.0.201+up27.0.2.tgz
set:
global.systemDefaultRegistry: ""
valuesContent: |-
globalArguments:
- "--serversTransport.insecureSkipVerify=true"
重启traefik服务配置
sudo kubectl rollout restart deployment traefik -n kube-system
最后域名访问输入上面生成的token即可。
3,Helm命令
Helm 是 Kubernetes 中非常强大的工具,能够大幅简化应用程序的安装和管理。通过 Helm,您可以轻松安装和升级应用,管理应用的多个版本,甚至创建自己的 Helm Charts 以便重用和共享。常用的 Helm 命令包括 install、upgrade、uninstall、list 等。
helm和 Linux 的 apt、yum 或 dnf 等包管理工具,但它专注于 Kubernetes 环境下的应用程序和服务的部署与管理。如果你熟悉 Linux 包管理工具,那么学习 Helm 的操作会非常直观。
- Chart 仓库(Repo)
Helm 的 Chart 仓库可以类比 Linux 的软件源,比如 Ubuntu 的 APT 源或 CentOS 的 Yum 仓库。 - Chart(软件包)
Chart 是 Helm 中的应用定义包,类似于 Linux 中的 .deb 或 .rpm 文件。 - Release(已安装的软件实例)
Helm 的 Release 可以类比于 Linux 中安装后的软件实例。例如,你用 helm install 部署了一个 Nginx Chart,它对应的是 Nginx 软件在系统中的实际安装。 - 模板化和参数化
Helm 支持使用模板和参数文件动态配置 Chart,这一点比 Linux 的包管理工具更强大,因为 Linux 的包通常是静态的二进制文件。
基础命令:
#安装和初始化,查看 Helm 的客户端和服务端版本。
helm version
#添加 Chart 仓库,例如:
helm repo add <repo_name> <repo_url>
helm repo add stable https://charts.helm.sh/stable
#更新本地的 Chart 仓库索引文件。
helm repo update
#搜索 Chart 仓库中的应用。例如:
helm search repo <keyword>
helm search repo mysql
#安装和卸载
helm install <release_name> <chart_name>
#安装 Chart 并创建一个 Release,例如:
helm install my-nginx bitnami/nginx
helm uninstall <release_name>
#卸载 Release,例如:
helm uninstall my-nginx
Release 管理命令
#查看 Release,列出当前命名空间的所有 Release。
helm list
#列出所有命名空间中的 Release。
helm list --all-namespaces
#升级和回滚
helm upgrade <release_name> <chart_name>
#升级 Release,例如:
helm upgrade my-nginx bitnami/nginx
helm rollback <release_name> <revision>
#回滚到指定版本,例如:
helm rollback my-nginx 1
#查看 Release 的版本历史
helm history <release_name>
#调试
#查看指定 Release 的状态信息。
helm status <release_name>
#获取 Release 的所有资源信息,包括配置和模板。
helm get all <release_name>
#运行与 Release 关联的测试。
helm test <release_name>
helm命令很多,不需要全部知道,只需要有herm命令后,无需我们自己编写yaml文件,很多支持k8s的软件,都提供这种直接的安装方式。
如:RabbitMQ高级消息队列协议,chatwoot聊天软件都支持在k8s一键安装。
打赏作者