k8s部署SpringCloud微服务项目

1、创建命名空间

kubectl create namespace iids<空间名称>

2、创建私有镜像密钥Secret

kubectl create secret docker-registry <Secret名称> \
     --docker-server=<harbor地址> \
     --docker-username=<账号> \
     --docker-password=<密码> \
     --docker-email=<随意邮箱>

3、部署springcloud微服务项目

(1) 部署方式选择
  • 微服务项目根据微服务类型分为两种部署,两种网络暴露。
  1. 有状态服务,如eureka、job、数据库等中间件,使用StatefulSet控制器部署,其它无状态微服务使用Deployment控制器部署。

  2. k8s内部访问微服务,service使用ClusterIP类型对内部进行暴露;外部访问微服务,service使用NodePort对外进行暴露。

(2) 部署有状态服务
  • 以eureka服务为例
  1. 修改eureka服务配置文件
server:
  port: 10000
spring:
  application:
    name: iids-msa-eureka
eureka:
  server:
    #关闭自我保护
    enable-self-preservation: false
    use-read-only-response-cache: false
    #设置自动清理时间
    eviction-interval-timer-in-ms: 5000
  client:
    registry-fetch-interval-seconds: 5
    #注册中心职责是维护服务实例,false:不检索服务。
    fetch-registry: true
    #此应用为注册中心,false:不向注册中心注册自己。
    register-with-eureka: true
    service-url:
      defaultZone: ${EUREKA_SERVER:http://127.0.0.1:${server.port}/eureka/}
  instance:
    hostname: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10
    instance-id: ${EUREKA_INSTANCE_HOSTNAME:${spring.application.name}}:${server.port}@${random.l ong(1000000,9999999)}
  1. 编译StatefulSet、service等iids-eureka.yml
#service
---
apiVersion: v1
kind: Service
metadata:
  namespace: iids
  name: iids-eureka
  labels:
    app: iids-eureka
spec:
  type: NodePort
  ports:
    - port: 10000
      name: iids-eureka
      targetPort: 10000
  selector:
    app: iids-eureka
---
#StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  namespace: iids
  name: iids-eureka
spec:
  serviceName: "iids-eureka"
  replicas: 2
  selector:
    matchLabels:
      app: iids-eureka
  template:
    metadata:
      labels:
        app: iids-eureka
    spec:
      imagePullSecrets:
        - name: harbor_secret   #对应创建私有镜像密钥Secret
      containers:
        - name: iids-msa-eureka
          image: harbor地址:25100/iids/iids-msa-eureka:1.0.0
          ports:
          - containerPort: 10000
          env:
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: EUREKA_SERVER
              value:  "http://iids-eureka-0.iids-eureka.iids:10000/eureka/,http://iids-eureka-1.iids-eureka.iids:10000/eureka/"
            - name: EUREKA_INSTANCE_HOSTNAME
              value: ${MY_POD_NAME}.iids-eureka.iids
            - name: ACTIVE
              value: "-Dspring.profiles.active=k8s"
  podManagementPolicy: "Parallel"
  1. 执行命令
kubectl apply -f iids-eureka.yml
(3) 部署内部访问服务
  1. 修改微服务配置文件

    eureka:
      client: #客户端注册进eureka服务列表内
        service-url:
          defaultZone: ${EUREKA_SERVER}
    
  2. 编译Deployment、service等iids-flat-config.yml

    #service
    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: iids
      name: iids-flat-config
      labels:
        app: iids-flat-config
    spec:
      type: ClusterIP
      ports:
        - port: 30400
          name: iids-flat-config
          targetPort: 30400
      selector:
        app: iids-flat-config
    ---
    #Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: iids
      name: iids-flat-config
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: iids-flat-config
      template:
        metadata:
          labels:
            app: iids-flat-config
        spec:
          imagePullSecrets:
            - name: harbor_secret
          containers:
            - name: iids-flat-config
              image: harbor地址:25100/iids/iids-flat-config:1.0.0
              #拉取镜像策略
              #Always 总是拉取镜像
    		 #IfNotPresent 本地有则使用本地镜像,不拉取
    		 #Never 只使用本地镜像,从不拉取,即使本地没有
              #如果省略imagePullPolicy  策略为IfNotPresent
              imagePullPolicy: Always
              ports:
              - containerPort: 30100
              env:
                - name: EUREKA_SERVER
                  value:  "http://iids-eureka-0.iids-eureka.iids:10000/eureka/,http://iids-eureka-1.iids-eureka.iids:10000/eureka/"
                - name: ACTIVE
                  value: "-Dspring.profiles.active=k8s"
    
(4) 部署外部访问服务
  1. 修改微服务配置文件

    eureka:
      client: #客户端注册进eureka服务列表内
        service-url:
          defaultZone: ${EUREKA_SERVER}
    
  2. 编译Deployment、service等iids-msa-flat-zuul.yml

    #service
    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: iids
      name: iids-msa-flat-zuul
      labels:
        app: iids-msa-flat-zuul
    spec:
      type: NodePort
      ports:
        - port: 10100
          name: iids-msa-flat-zuul
          targetPort: 10100
      selector:
        app: iids-msa-flat-zuul
    ---
    #Deployment
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: iids
      name: iids-msa-flat-zuul
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: iids-msa-flat-zuul
      template:
        metadata:
          labels:
            app: iids-msa-flat-zuul
        spec:
          imagePullSecrets:
            - name: harbor_secret
          containers:
            - name: iids-flat-config
              image: harbor地址:25100/iids/iids-msa-flat-zuul:1.0.0
              imagePullPolicy: Always
              ports:
              - containerPort: 30100
              env:
                - name: EUREKA_SERVER
                  value:  "http://iids-eureka-0.iids-eureka.iids:10000/eureka/,http://iids-eureka-1.iids-eureka.iids:10000/eureka/"
                - name: ACTIVE
                  value: "-Dspring.profiles.active=k8s"
    
(5) 注意事项
  1. 镜像拉取策略
containers:
- name: iids-flat-config
  image: harbor地址:25100/iids/iids-flat-config:1.0.0
  imagePullPolicy: Always
#拉取镜像策略
#Always 总是拉取镜像
#IfNotPresent 本地有则使用本地镜像,不拉取
#Never 只使用本地镜像,从不拉取,即使本地没有
#如果省略imagePullPolicy  策略为IfNotPresent
  2. Kubernetes 调整 nodePort 端口范围,修改默认30000-32767端口范围
#编辑k8s配置文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml
#添加 - --service-node-port-range=1-65535 
spec:
  containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=1-65535  #只需添加到本行即可
    - --advertise-address=192.168.0.13
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐