每日一Go-64、Go工程师必看!30分钟在Docker Desktop打造高可用K8s集群实战

12 阅读2分钟

一、安装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,手动模式

下载文件

github.com/kubernetes-…

放到 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君”回复“源码”获取源码

2、pan.baidu.com/s/1B6pgLWfS…


如果您喜欢这篇文章,请您(点赞、分享、亮爱心),万分感谢!