一、安装Kind(Kubernetes IN Docker)
前提条件是你本机已经安装了Docker Desktop 每日一Go-60、Docker 实操(Go 工程从 0 到跑起来)
1. windows,终端命令模式。
> winget install Kubernetes.kind
已找到 kind [Kubernetes.kind] 版本 0.31.0
此应用程序由其所有者授权给你。
Microsoft 对第三方程序包概不负责,也不向第三方程序包授予任何许可证。
正在下载
██████████████████████████████ 10.7 MB / 10.7 MB
已成功验证安装程序哈希
正在启动程序包安装...
已修改路径环境变量;重启 shell 以使用新值。
添加了命令行别名: "kind"
已成功安装
2. windows,手动模式
下载文件
放到 C:\Program Files\Go\bin下,命名为 kind.exe
重启终端
参考网址:kind.sigs.k8s.io/docs/user/q…:;)
二、创建集群
1. 编写配置,kind-config.yaml
# Kind Kubernetes集群配置文件
# 用于定义Kind集群的网络配置和节点组成
# 集群定义
kind: Cluster # 资源类型:Cluster表示一个Kind集群配置
apiVersion: kind.x-k8s.io/v1alpha4 # Kind API版本
# 网络配置
networking:
# API Server绑定的地址
# "127.0.0.1"表示仅允许本地访问API Server
apiServerAddress: "127.0.0.1"
# API Server监听的端口
# 6443是Kubernetes API Server的默认端口
apiServerPort: 6443
# 节点配置列表
# 定义集群中包含的节点及其配置
nodes:
# 控制平面节点配置
- role: control-plane # 节点角色:control-plane(控制平面)节点
# 额外端口映射:将容器端口映射到主机端口
# 用于从主机访问集群内部服务
extraPortMappings:
- containerPort: 80 # 容器内部端口:HTTP服务
hostPort: 8080 # 主机端口:外部通过8080访问容器80端口
- containerPort: 443 # 容器内部端口:HTTPS服务
hostPort: 8443 # 主机端口:外部通过8443访问容器443端口
# 工作节点配置
- role: worker # 节点角色:worker(工作节点),用于运行应用Pod
- role: worker # 第二个工作节点,提供更高的计算能力和可用性
2. 创建集群
$ kind create cluster --config kind-config.yaml --name golang-per-day
Creating cluster "golang-per-day" ...
• Ensuring node image (kindest/node:v1.35.0) 🖼 ...
✓ Ensuring node image (kindest/node:v1.35.0) 🖼
• Preparing nodes 📦 📦 ...
✓ Preparing nodes 📦 📦
• Writing configuration 📜 ...
✓ Writing configuration 📜
• Starting control-plane 🕹️ ...
✓ Starting control-plane 🕹️
• Installing CNI 🔌 ...
✓ Installing CNI 🔌
• Installing StorageClass 💾 ...
✓ Installing StorageClass 💾
• Joining worker nodes 🚜 ...
✓ Joining worker nodes 🚜
Set kubectl context to "kind-golang-per-day"
You can now use your cluster with:
kubectl cluster-info --context kind-golang-per-day
Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
三、在K8s中部署一套Go服务
app.yaml
# 服务(Service) - 用于暴露应用程序并提供负载均衡
apiVersion: v1 # Kubernetes API版本
kind: Service # 资源类型:Service用于暴露应用程序
metadata:
name: golang-per-day-64 # 服务名称
namespace: codee-jun # Kubernetes命名空间
spec: # 服务规格
ports: # 端口配置列表
- protocol: TCP # 协议类型:TCP
port: 8080 # 服务端口(集群内部访问端口)
targetPort: 8080 # 目标端口(Pod内部端口)
sessionAffinity: ClientIP # 会话亲和性:ClientIP表示同一客户端的请求会转发到同一Pod
selector: # Pod选择器
app: golang-per-day-64 # 匹配具有app=golang-per-day-64标签的Pod
---
# 部署(Deployment) - 用于管理应用程序的Pod副本
apiVersion: apps/v1 # Kubernetes应用部署的API版本
kind: Deployment # 资源类型:Deployment用于管理无状态应用的部署
metadata: # 元数据部分
name: golang-per-day-64 # 部署名称
namespace: codee-jun # Kubernetes命名空间
spec: # 部署规格
# 副本数量:期望运行的Pod数量
replicas: 3 # 运行3个Pod副本,提供高可用性
# 选择器:用于选择管理哪些Pod
selector:
matchLabels: # 匹配标签:选择具有特定标签的Pod
app: golang-per-day-64 # 标签名称,用于标识应用
# Pod模板:定义Pod的规格
template:
metadata: # Pod的元数据
labels: # Pod标签:用于标识和选择Pod
app: golang-per-day-64 # 应用标签名称
spec: # Pod的规格部分
containers: # 容器定义列表
- name: golang-per-day-64 # 容器名称
image: imoowi/golang_per_day:day60 # 容器镜像:仓库/镜像名:标签
ports: # 容器端口配置
- containerPort: 8080 # 容器内部监听端口
# 资源配置:定义容器的资源请求和限制
resources: # 资源配置
requests: # 资源请求:调度Pod时需要的最小资源
cpu: 1000m # CPU请求:1000m = 1核
memory: 2Gi # 内存请求:2GB
limits: # 资源限制:容器允许使用的最大资源
cpu: 2000m # CPU限制:2000m = 2核
memory: 4Gi # 内存限制:4GB
部署命令:
1. 创建 namespace
$ kubectl create namespace codee-jun
namespace/codee-jun created
2. 部署 app.yaml
$ kubectl apply -f app.yaml
service/golang-per-day-64 created
deployment.apps/golang-per-day-64 created
3. 查看 Pod
$ kubectl get pods -n codee-jun -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
golang-per-day-64-747cb75b95-lk6zh 1/1 Running 0 3m53s 10.244.2.2 golang-per-day-worker2
golang-per-day-64-747cb75b95-phwld 1/1 Running 0 3m53s 10.244.1.2 golang-per-day-worker
golang-per-day-64-747cb75b95-skfwv 1/1 Running 0 3m53s 10.244.2.3 golang-per-day-worker2
4. 查看服务
$ kubectl get svc -n codee-jun
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
golang-per-day-64 ClusterIP 10.96.53.47 <none> 8080/TCP 5m40s
友情链接:加班费计算器(vx小程序搜索“加班计”)
*源码地址*
1、公众号“Codee君”回复“源码”获取源码
如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!