本文是以redis进行安装示例,这里只是启动单个redis服务示例。redis集群选择StatefulSet是最好的选择。对于该部分感兴趣可以私信我。本节只是讲解,文中代码可能没法使用,只做讲解用途。
在开始前需要创建一个自己安装部署一个redis镜像。
本文自己构建的镜像的tag为:redis/master:2.5.0,镜像中需要放入**/home/redis/startup.sh**脚本:
source /root/.bash_profile
/usr/sbin/sshd
sed -i "s/127.0.0.1/${POD_IP}/g" /home/redis/redis/bin/redis_master
sed -i "s/127.0.0.1/${POD_IP}/g" /home/redis/redis/etc/redis-master.conf
su - redis -c "redis_master $1"
脚本中的${POD_IP}在后续ReplicaSet中会使用,用户替换配置的。
创建的redis-master的ReplicaSet的yaml文件redis-master-rs.yaml:
apiVersion apps/v1
kind ReplicaSet
metadata
name redis-master
namespace wel
spec
replicas3
selector
matchLabels
app redis
role master
template
metadata
labels
app redis
role master
spec
serviceAccountName harbor
containers
name redis-master
image redis/master2.5.0
command'/bin/sh'
args"-c""/home/redis/startup.sh start ; while true; do tailf /home/redis/redis/log/redis.log;sleep 10;done"
ports
containerPort6001
env
name POD_IP
valueFrom
fieldRef
fieldPath status.podIP
restartPolicy Always
其中serviceAccountName: harbor引用之前“K8S中配置镜像拉取serviceAccount”
env模块中的POD_IP用户获取当前POD的IP地址,该地址用于替换redis中的配置POD_IP。
需要在args中调用启动startup.sh启动redis的master服务,其次创建一个死循环,保证pod始终为RUNNING状态。
然后在后台服务执行命令:
kubectl create -f redis-master-rs.yaml
命令执行成功无报错,可以执行命令查看pod是否创建成功。由于本rs指定了namespace,需要在命令中使用-n参数:
kubectl get rs -n wel