记录使用minikube部署web程序,并灰度发布不同版本

1. 安装软件

1.1安装docker desktop

下载地址
重点:配置镜像加速

1.2 安装k8s&minikube

这里参考阿里社区的配置
minikube1.24.0版本下载地址
重点:安装版本问题【因为后面要用阿里云的服务来获取所需Docker镜像,一直不成功使用的高版本,所以最后降回了1.24.0
启动完成后会在docker启动一个容器,如下
在这里插入图片描述

2 同步本地镜像到minikube

因为是使用minikube启动的k8s环境,所以如果要使用本地制作的web镜像,还需要把镜像同步到minikube,可以使用以下命令同步:

# General
minikube image load <IMAGE_NAME>
# Example
minikube image load pz/demo

或者是通过使用Minikube的image build, 我们可以在Minikube中直接构建镜像:

# General
minikube image build -t <IMAGE_NAME> .
# Example
minikube image build -t pz/demo .

我使用了第一种方法,成功后可以看到你的镜像已经在minikube容器内的docker镜像列表了【有点套娃的感觉】。
记录使用minikube部署web程序,并灰度发布不同版本_第1张图片

3 构建Pod,Service

我这里直接贴出代码:

deploy-v1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment-v1
spec:
  replicas: 2  # 设置副本数量
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: demo:1.0.1
        ports:
        - containerPort: 8833

deploy-v2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment-v2
spec:
  replicas: 2  # 设置副本数量
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: demo:1.0.2
        ports:
        - containerPort: 8833

service-config.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 8833  # Service 暴露的端口
    targetPort: 8833  # 将流量转发到 Pod 的 8833 端口
  type: NodePort

然后执行:

kubectl apply -f deploy-v1.yaml
kubectl apply -f deploy-v2.yaml
kubectl apply -f service-config.yaml

然后再去执行就可以访问你的服务了。

minikube service my-service

记录使用minikube部署web程序,并灰度发布不同版本_第2张图片

可以做一些灰度发布操作

1、 先修改deploy-v1.yaml中的副本数量为4个

v1版本启动4个副本
此时接口返回
记录使用minikube部署web程序,并灰度发布不同版本_第3张图片

2、v2发布占2个副本

v1和v3同时运行
此时接口返回
记录使用minikube部署web程序,并灰度发布不同版本_第4张图片

3、关闭v1,v2占用4个副本

v3占用4个副本
接口返回
记录使用minikube部署web程序,并灰度发布不同版本_第5张图片

问题总结

  • 不知道minikube内部还存在docker容器环境,一直拉取镜像失败,报错:magePullBackOff类似的,原来是没有正确拉取到镜像。

你可能感兴趣的:(kubernetes,docker,java)