1. 程式人生 > >kubernetes 1.5安裝 Redis 3.2.6 Cluster StatefulSet

kubernetes 1.5安裝 Redis 3.2.6 Cluster StatefulSet

聽說Redis 3以後安裝叢集比較簡單,幾個命令就可以完全搞定,在自己的電腦上面安裝試了下,果然比較爽。

今天準備把Redis 3的叢集安裝在K8s上面,通常的做法都是在github上面查詢是不是有人已經做過,果然很多。下面的程式碼基本上來自於github上面。不過就算用這個面的程式碼,在自己部署的時候也存在不少的問題。因為github上面的都是大神,很比比較小的問題不會寫的很清楚。

所以: 如果這個文件(blog)如何解決不了問題,就到github上面去查詢別的方法。

1>>>>>>>>>>>映象說明

  使用的映象名:    ausov/redis:3.2-alpine

  先使用下面命令下載映象: 

docker pull ausov/redis:3.2-alpine

   這個映象如果無法下載,則需要自己手動build一下.

   這個是編譯需要使用的檔案

[[email protected] alpine]# pwd
/root/k8s-redis/3.2/alpine
[[email protected] alpine]# ls
docker-entrypoint.sh  Dockerfile  redis.conf

cat docker-entrypoint.sh 
#!/bin/sh

set -eox pipefail
#shopt -s nullglob

REDIS_CONF=${REDIS_CONF:-"/opt/k8s-redis/redis.conf"}

if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
  set -- redis-server "
[email protected]
" fi if [ "$1" = 'redis-server' ] && [ -n "$SLAVEOF" ] && [ -z "$SENTINEL" ]; then echo "Starting Redis replica" set -- [email protected] "$REDIS_CONF" --slaveof "$SLAVEOF" 6379 elif [ "$1" = 'redis-server' ] && [ -n "$SENTINEL" ]; then echo "Starting Redis sentinel" while true; do redis-cli -h $SENTINEL INFO if [[ "$?" == "0" ]]; then break fi echo "Connecting to master failed. Waiting..." sleep 10 done echo "sentinel monitor primary $SENTINEL 6379 2" >> "$REDIS_CONF" echo "sentinel down-after-milliseconds primary 5000" >> "$REDIS_CONF" echo "sentinel failover-timeout primary 10000" >> "$REDIS_CONF" echo "sentinel parallel-syncs primary 1" >> "$REDIS_CONF" set --
[email protected]
"$REDIS_CONF" --port 26379 --sentinel --protected-mode no elif [ "$1" = 'redis-server' ]; then echo "Starting Redis master" set -- [email protected] "$REDIS_CONF" fi exec "[email protected]"
這個檔案內容太多,我們在這裡看下可用的就OK。
cat redis.conf | grep -Ev '(^#|^$)' 
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes


cat Dockerfile 

FROM redis:3.2-alpine

COPY ["redis.conf", "/opt/k8s-redis/"]
COPY ["docker-entrypoint.sh", "/usr/local/bin/"]

以上就是編譯需要使用到的檔案。cd到這個目錄,執行下面的命令。
docker build -t "ausov/redis:3.2-alpine" .

映象編譯完成以後,需要確保所有的節點都有這個映象。

2>>>>>>>>>>>部署安裝

部署安裝我們需要使用三個檔案,分別是:

primary.yml  secondary.yml  sentinel.yml

下面是檔案內容:

[[email protected] example]# cat primary.yml 
apiVersion: v1
kind: Service
metadata:
  name: redis-primary
  labels:
    app: redis-primary
spec:
  ports:
  - port: 6379
    name: redis-primary
  clusterIP: None
  selector:
    app: redis-primary
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: redis-primary
spec:
  serviceName: redis-primary
  replicas: 1
  template:
    metadata:
      labels:
        app: redis-primary
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: redis-primary
        image: ausov/redis:3.2-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
          name: redis-primary
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
      annotations:
        volume.alpha.kubernetes.io/storage-class: anything
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

[[email protected] example]# cat secondary.yml 
apiVersion: v1
kind: Service
metadata:
  name: redis-secondary
  labels:
    app: redis-secondary
spec:
  ports:
  - port: 6379
    name: redis-secondary
  clusterIP: None
  selector:
    app: redis-secondary
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: redis-secondary
spec:
  serviceName: redis-secondary
  replicas: 2
  template:
    metadata:
      labels:
        app: redis-secondary
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: redis-secondary
        image: ausov/redis:3.2-alpine
        imagePullPolicy: IfNotPresent
        env:
        - name: SLAVEOF
          value: redis-primary-0.redis-primary
        ports:
        - containerPort: 6379
          name: redis-secondary
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
      annotations:
        volume.alpha.kubernetes.io/storage-class: anything
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

[[email protected] example]# cat sentinel.yml 
apiVersion: v1
kind: Service
metadata:
  name: redis-sentinel
  labels:
    app: redis-sentinel
spec:
  ports:
  - port: 26379
    name: redis-sentinel
  clusterIP: None
  selector:
    app: redis-sentinel
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: redis-sentinel
spec:
  serviceName: redis-sentinel
  replicas: 3
  template:
    metadata:
      labels:
        app: redis-sentinel
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: redis-sentinel
        image: ausov/redis:3.2-alpine
        imagePullPolicy: IfNotPresent
        env:
        - name: SENTINEL
          value: redis-primary-0.redis-primary
        ports:
        - containerPort: 26379
          name: redis-sentinel

三個檔案都存在以後:
 kubectl create -f primary.yml  -f secondary.yml  -f  sentinel.yml

建立完成後,檢視一下pod

kubectl get pod 

會得到以下資訊:

NAME                                READY     STATUS    RESTARTS   AGE
redis-primary-0                     1/1       Running   0          2d
redis-secondary-0                   1/1       Running   0          2d
redis-secondary-1                   1/1       Running   0          2d
redis-sentinel-0                    1/1       Running   0          2d
redis-sentinel-1                    1/1       Running   0          2d
redis-sentinel-2                    1/1       Running   0          2d

下面是檢視StatefulSet的資訊:
[[email protected] example]# kubectl get statefulset
NAME              DESIRED   CURRENT   AGE
redis-primary     1         1         2d
redis-secondary   2         2         2d
redis-sentinel    3         3         2d

必須要確保DESIRED和CURRENT的值是一樣的。

檢視持久儲存的資訊:

[[email protected]er example]# kubectl get pvc
NAME                                       STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE
data-redis-primary-0                       Bound     pvc-94534255-d614-11e6-955d-1866daed1b04   5Gi        RWO           2d
data-redis-secondary-0                     Bound     pvc-9a8f2080-d614-11e6-955d-1866daed1b04   5Gi        RWO           2d
data-redis-secondary-1                     Bound     pvc-9a9029b4-d614-11e6-955d-1866daed1b04   5Gi        RWO           2d

我們在注意這裡的STATUS,是Bound。

如果不是,用命令

describe pvc data-redis-primary-0  
如果出現下面的問題:

cannot find volume plugin for alpha provisioning

則需要修改檔案:

/etc/kubernetes/manifests/kube-controller-manager.json 

增加引數: --enable-hostpath-provisioner=true

以下是截取了這個檔案的一部分:

        "name": "kube-controller-manager",
        "image": "gcr.io/google_containers/kube-controller-manager-amd64:v1.5.1",
        "command": [
          "kube-controller-manager",
          "--address=127.0.0.1",
          "--leader-elect",
          "--master=127.0.0.1:8080",
          "--cluster-name=kubernetes",
          "--root-ca-file=/etc/kubernetes/pki/ca.pem",
          "--service-account-private-key-file=/etc/kubernetes/pki/apiserver-key.pem",
          "--cluster-signing-cert-file=/etc/kubernetes/pki/ca.pem",
          "--cluster-signing-key-file=/etc/kubernetes/pki/ca-key.pem",
          "--insecure-experimental-approve-all-kubelet-csrs-for-group=system:kubelet-bootstrap",
          "--allocate-node-cidrs=true",
          "--enable-hostpath-provisioner=true",
          "--cluster-cidr=10.245.0.0/16"
        ],

修改儲存,重啟一下docker或kubelet.

通過上面的配置,Redis基本就配置完成: 

這兩個WARNING暫不影響redis使用,解決方法過兩天再寫上。

11:M 04 Jan 09:45:23.515 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
11:M 04 Jan 09:45:23.515 # Server started, Redis version 3.2.1
11:M 04 Jan 09:45:23.515 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
11:M 04 Jan 09:45:23.516 * The server is now ready to accept connections on port 6379
OK

相關推薦

kubernetes 1.5安裝 Redis 3.2.6 Cluster StatefulSet

聽說Redis 3以後安裝叢集比較簡單,幾個命令就可以完全搞定,在自己的電腦上面安裝試了下,果然比較爽。 今天準備把Redis 3的叢集安裝在K8s上面,通常的做法都是在github上面查詢是不是有人已經做過,果然很多。下面的程式碼基本上來自於github上面。不過就算用

【轉】CentOS 7.0 安裝Redis 3.2.1詳細過程和使用常見問題

nec count ges des useful 內存 warning before outside http://www.linuxidc.com/Linux/2016-09/135071.htm 環境:CentOS 7.0 Redis 3.2.1 Redis的安裝與啟動

CentOS7.2 安裝redis 3.0.6叢集

1.環境確認 a.系統版本檢視 [[email protected] ~]$ cat /etc/redhat-release CentOS Li

redis-3.2.6 安裝與配置

1.下載與解壓: [root@SZB-L0045333 Redis]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz [root@SZB-L0045333 Redis]# tar xzf r

zabbix 2.4.5升級到3.2.6總結

zabbix1、如果php版本小於5.6,需要升級到5.6以上。2、保存數據庫不變,當zabbix server或zabbix proxy升級後啟動時會自動更新數據庫。3、整個架構的zabbix server 和 zabbix proxy都要同時升級。4、如果升級後新增到proxy的機器無法識別,先重啟pro

redis系列01:源碼安裝redis-3.2.10

創建 好的 color netstat mon compress 手動 idf sta 前段時間安裝好的redis,今天用腳本安裝的時候突然出現版本異常的問題,所以更新一篇為大家提供參考 本次安裝在CentOS6.5,采用的redis-3.2.10,最新的redis-4.0

安裝zabbix-3.2.6編譯報錯no acceptable C compiler

zabbix linux執行安裝zabbix在編譯的時候./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libc

centos6.8手動安裝redis-3.2.8的詳細步驟

CentOS6.8使用yum安裝有時候沒有比較新的版本,所以手動安裝,下面記錄一下步驟。 下載最新版本 以3.2.8為例,附上地址:redis-3.2.8.tar.gz  http://download.redis.io/relea

CentOS7安裝Redis-3.2.8

so easy!!! 使用遠端登入工具我用的是 Private Shell 我仗義的把資源分享出來了 在這裡 連結:https://pan.baidu.com/s/1flXl8jx19IGsJ66HbCcFLg 提取碼:9eux 登入自己安裝的虛擬機器 [[

CentOS 7安裝 Redis 3.2.x(單機)

一、準備操作: 1、先安裝虛擬機器,這裡已安裝VmWare14.x; 2、安裝Linux作業系統,這裡安裝了CentOS7,另:確認已安裝rz/sz命令,如果沒有,執行:yum install lrzsz 即可; 3、下載Redis,在官網下載,這裡用的是Redis3.

centos6.9安裝redis-3.2.12

安裝gcc:yum install gcc-c++ 下載redis:連結:https://pan.baidu.com/s/1iDAy15GDZAz0hu_0NqyDvg 密碼:ng65 解壓tar -zxvf redis-3.2.12.tar.gz

Redis 3.2.6 Sentinel部署

CentOS 6.8 monitor:   192.168.1.100 master: 192.168.1.120 slave: 192.168.1.121             192.168.1

Linux安裝Redis-3.2.8流程和問題

以下是參考的一篇文章,基本上文章描述的問題都遇到了,也參考解決了。在這裡記錄下,以備後用。主要問題是依賴包和cpu64位不支援問題。需要改動的redis配置。 安裝依賴包 #yum install gcc gcc-c++ tcl -y PS:遇到的問題 a、如果不安

Windows7 Python-3.6 安裝PyCrypto(pycrypto 2.6.1)出現錯誤以及解決方法

windows python pycrypto 今天準備在Windows系統上基於python3.6安裝一個pycrypto 2.6.1模塊,很不幸的報了一堆錯誤,如下所示:running installrunning buildrunning build_pyrunning build_extw

1.1 學習之初;1.2 約定;1.3 認識Linux;1.4 創建虛擬機;1.5安裝centos7

安裝centos7給自己定個位:1. 定位:為更好地就業,不被社會淘汰,做一名合格的運維工程師2. 目標:半年左右學習完成基礎,之後跳槽運維工作,工作中多多積累經驗3. 工資:第一次奔著8k+起,一到兩年提升到15k-20k學習:1. 班主任每天安排的學習課程完成後,如果有空余時間精力再繼續預習新的課程,每天

1.1學習之初1.2約定1.3認識Linux1.4創建虛擬機1.5安裝CentOS7

size mar 職位 重要 pad lis 設定 ans otto 1.1 學習之初一、給自己定位1、學這個課程的目的是什麽?2、學完之後要做什麽職位?3、學完之後要再哪個城市發展二、給自己設定一個目標1、何時學完?2、何時跳槽3、第一份薪資多少4、一年後多少,兩年後多少

1.1 學習之初 1.2 約定 1.3 認識Linux 1.4 安裝虛擬機 1.5 安裝centos

2018-03-181,安裝好虛擬機後,文件---新建虛擬機--然後就下一步--,2下一步選如下:3.如下圖4.下一步直到如下圖5.下一步直到如下圖:6.下一步:7.下一步 直到完成即可。8.下面開始配置:編輯虛擬機:9.配置網絡:10.然後開始點 開啟此虛擬機--然後按上下左右箭頭按鍵--選擇第一個In

swarm叢集下搭建ELK:filebeat-5.6.11+redis-3.2+logstash-5.6+kibana-5.6+es5.6

上篇:https://blog.csdn.net/qq_35299863/article/details/83658048 之前介紹了叢集下tengine代理elasticsearch叢集,以及kibana實現CI/CD,現在介紹如何做一套ELK叢集 軟體環境:filebeat-5.

ambari 2.6.1.5安裝

系統要求:CentOS 7Python 2.7.xJDK1.8+安裝環境準備HDP版本相容性 https://supportmatrix.hortonworks.com/ 運維知識庫 > ambari安裝 > image2018-9-29_11-7-33.png 由於嚴格依賴版本,所以要先確

redis 3.2.5單機版安裝

持久 開機自啟動 ria amp 單機版 scrip all 停止 make 參照地址 http://www.mamicode.com/info-detail-1488639.html 前提:防火墻安裝,然後打開端口,設置開機啟動 一、redis源碼安裝 [root