版权声明:本文为博主原创文章,未经博主允许不得转载。 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中就能自动更新代码了。这在我下一章节中做简单介绍。