kubernetes 进阶篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011510825/article/details/83036908

    看这篇文章前,应该了解kubernetes的一些基础概念,如:deployments,pods,services等,建议先阅读基础篇

有使用过docker的同学应该都使用过docker-compose,用yaml文件来写配置文件。这里我们也是使用yaml文件来写配置,主要介绍几个kubernetes关键参数,最后再给实例配置和如何更新服务。

apiVersion: apps/v1
# 版本
kind: Deployment
# kind中有Deployment、Service和Pod
metadata:
  name: application
# 元数据,主要用于定义名称和标签(label)
# 指定组成pod的实际对象,spec属性包括一些containers,storage,volumes,或者其他Kubernetes需要知道的参数,以及诸如是否在容器失败时重新启动容器的属性
spec:
  selector:
    matchLabels:
      app: application
  replicas: $REPLICAS
  # 副本数
  template:
    metadata:
      labels:
        app: application
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/21epub/applicationstore:$TAG
        imagePullPolicy: Always
        name: applicationstore
        env:
        - name: DATE
          value: $DATE
        envFrom:
          - configMapRef:
              name: applicationstore
        livenessProbe:
          tcpSocket:
            port: 9090
          initialDelaySeconds: 15
          periodSeconds: 20          
      imagePullSecrets:
      - name: vpc-reg

然后,我们根据配置文件,创建deployments

kubectl create -f application.yaml

pod创建故障定位

写完yaml文件,如果容器不处于running状态,则需要看看YAML文件的内容那里错了,定位问题。

kubectl describe pod application

一步步调试吧。

写完启动容器的yaml文件后,还需要写配置的yaml文件,因为,你可能存在多套环境,每个环境之间有一些参数是不一样的,比如测试环境和生产环境使用的数据库肯定是不一样的,你需要写多套configmap。

类似这种,这是测试环境的

apiVersion: v1
kind: ConfigMap
metadata:
  name: application
  namespace: test
data:
  ZOO_SERVERS: zk-cs:2181
  DOCKER_ENV: test
  MYSQL_HOST: test.mysql.rds.aliyuncs.com

这是生产环境的

apiVersion: v1
kind: ConfigMap
metadata:
  name: application
  namespace: www
data:
  ZOO_SERVERS: zk-cs:2181
  DOCKER_ENV: www
  MYSQL_HOST: www.mysql.rds.aliyuncs.com

好了,这些都准备好后,我们应该再写一个sh脚本,每次构建完镜像后,自动生成启动的yaml文件,然后apply新的yaml文件,达到发布应用的效果。

这是示例:

#!/bin/sh
DATE=$(date)
export DATE

NAMESPACE=$1
export NAMESPACE

if [ $NAMESPACE = "test" ]
then
    REPLICAS=1
    REPLICAS_EPUB360=1
    REPLICAS_CELERY=1
    TAG="develop"
    EPUB360_CPU_REQUEST="0.5"
    EPUB360_MEM_REQUEST="0.5Gi"
    ZK_NUM=1
fi


if [ $NAMESPACE = "www" ]
then
    REPLICAS=2
    REPLICAS_EPUB360=3
    REPLICAS_CELERY=2
    TAG=$3
    EPUB360_CPU_REQUEST="1"
    EPUB360_MEM_REQUEST="1.1Gi"
    ZK_NUM=3
fi

export REPLICAS
export TAG

# applicationstore 
APPNAME=$2

kubectl apply -f $NAMESPACE/configmap/
envsubst < common/$APPNAME.yaml | kubectl apply --namespace=$NAMESPACE -f -

调用的时候,传入环境名和服务名(更新测试环境的application的应用)

sh /hooks/reload_app.sh test application
这个sh脚本可以使用hubot机器人去带我们实行,bearychat添加这个机器人,然后每次在bearychat中就能自动更新代码了。这在我下一章节中做简单介绍。

猜你喜欢

转载自blog.csdn.net/u011510825/article/details/83036908