本文是以redis进行安装示例,这里只是启动单个redis服务示例。redis集群选择StatefulSet是最好的选择。对于该部分感兴趣可以私信我。本节只是讲解,文中代码可能没法使用,只做讲解用途。

在开始前需要创建一个自己安装部署一个redis镜像。

本文自己构建的镜像的tag为:redis/master:2.5.0,镜像中需要放入/home/redis/startup.sh脚本:

#!/bin/bash
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:
  replicas: 3
  selector:
    matchLabels:
      app: redis
      role: master
  template:
    metadata:
      labels:
         app: redis
         role: master
    spec:
       serviceAccountName: harbor
       containers:
         - name: redis-master
           image: redis/master:2.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:
             - containerPort: 6001
           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

发表评论

电子邮件地址不会被公开。