文章目录

  • 一、制作镜像push到harbor
  • 二、编写Deployment.yaml
  • 三、windows环境安装kubectl
  • 四、执行部署命令
  • 4.1 部署Deployment.yaml
  • 4.2 部署Service.yaml


一、制作镜像push到harbor

请看之前的博客:Dockerfile制作镜像部署springboot项目

二、编写Deployment.yaml

Deployment对象,顾名思义,是用于部署应用的对象。它是Kubernetes中最常用的一个对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法,从而无需像手动创建ReplicaSet和Pod对象。使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚。

通过Deployment对象,你可以轻松的做到以下事情:

  • 创建ReplicaSet和Pod
  • 滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
  • 平滑地扩容和缩容
  • 暂停和继续Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: pai-sn
  labels:
  	#应用名称
    app: pai-sn
  #Deployment 命名空间
  namespace: tt
spec:
  #副本个数
  replicas: 2
  selector:
    matchLabels:
      app: pai-sn
  template:
    metadata:
      labels:
        app: pai-sn
    spec:
      containers:
        - name: pai-sn
      	  #docker镜像,已经部署到私有Harbor,指定拉取。
          image: 192.168.136.133:5001/library/pai-sn:alpine
          args:
          	#指定运行环境
            - --spring.profiles.active=test
          imagePullPolicy: Always
          ports:
            - containerPort: 8080
      imagePullSecrets:
      	#拉取私有镜像的密钥,如果镜像是公开的则不需要
        - name: login

三、windows环境安装kubectl

1.下载地址:kubectl.exe 放到D:\Program Files\kubectl

k8s 下发镜像 自动升级 k8s集群如何上传镜像_k8s 下发镜像 自动升级

2.在用户目录(C:\Users\Administrator)新建目录.kube,拷贝master节点config

k8s 下发镜像 自动升级 k8s集群如何上传镜像_Pod_02


打开看下

k8s 下发镜像 自动升级 k8s集群如何上传镜像_Deployment_03

到本机C:\Users\Administrator.kube目录下

k8s 下发镜像 自动升级 k8s集群如何上传镜像_Pod_04


3.打开cmd窗口,执行命令kubectl get nodes

k8s 下发镜像 自动升级 k8s集群如何上传镜像_回滚_05

四、执行部署命令

执行之前,在每个节点的/etc/docker/daemon.json文件添加
“insecure-registries”: [“192.168.136.133:5001”],这样就可以以http协议访问私有的harbor仓库,原因是我的harbor设置的http,没有配置https。

4.1 部署Deployment.yaml

kubectl create namespace tt
kubectl apply -f Deployment.yaml

k8s 下发镜像 自动升级 k8s集群如何上传镜像_kubernetes_06


查看 pod

kubectl get pods -o wide -n tt

k8s 下发镜像 自动升级 k8s集群如何上传镜像_Pod_07

4.2 部署Service.yaml

一个Service可以看作一组提供相同服务的Pods的对外访问接口,Service作用于哪些Pods是通过label selector来定义的,这些Pods能被Service访问,Pod之间的发现和路由(如应用中的前端和后端组件)由Kubernetes Service处理。Service有四种type: ClusterIP(默认)、NodePort、LoadBalancer、ExternalName. 其中NodePort和LoadBalancer两类型的Services可以对外提供服务。这里使用NodePort来配置
Service.yaml内容:

apiVersion: v1
kind: Service
metadata:
  name: pai-sn
  namespace: tt
  labels:
    app: pai-sn
    ingress: service
spec:
  type: NodePort #这里代表是NodePort类型的
  ports:
    - port: 8080 #这里的端口和clusterIP对应,即ip:8080,供内部访问。
      targetPort: 8080 #端口一定要和container暴露出来的端口对应
      #nodePort: 32143   # nodePort不指定自动产生,此端口供外部调用。
  selector:
    app: pai-sn

执行命令应用yaml

kubectl apply -f Service.yaml

k8s 下发镜像 自动升级 k8s集群如何上传镜像_Pod_08


浏览器访问三个节点的地址都能访问到192.168.136.129:31298/192.168.136.131:31298/192.168.136.132:31298