Kubernetes에 etcd 서버 배포 시도

4698 단어 kubernetesetcd

개요


다음 문장에서 각 Pod의 처리 내용과 진전 상황을 관리하기 위해 모든 노드에 etcd 서버를 설정했습니다.
Kubernetes의 모든 노드에서 etcd 서버를 이동하는 예입니다.
Kubernetes의 Daemon set을 사용하여 각 노드에서 1 상자를 이동합니다.
또 쿠베르네테스의 구축여기요이 완료됐다는 전제가 있다.

데몬 세트 정보


Kubernetes의 모든 노드에서 동일한 Pod을 이동할 수 있습니다.
따라서 노드를 연결하는 포트 이동 서비스나 hostPath를 불러오는 것도 쉽다.
모든 노드에서 감시 도구를 실행하거나 로그 수집 도구를 실행하는 것은 공식적인 예이다.

작업 환경


Kubernetes 구축 완성된 상태는 거의 같다.
또 이번에는 여러 노드에서 이동하기 위해 두 노드를 이동한다.
주 서버
노드 서버 1
노드 서버 2
호스트 이름
master
node1
node2
IP 주소
192.168.137.20
192.168.137.21
192.168.137.22
실행 서비스
etcdkube-apiserverkube-controller-managerkube-scheduler
kubeletkube-proxy
kubeletkube-proxy

프로비저닝


이번에는 마스터 서버에서 실행되는 etcd를 발견용 etcd로 사용했습니다.
Deamonset을 사용하여 각 노드에서 상승하는 etcd 패키지를 사용하면 발견자가 사용하는 etcd를 먼저 물어보고 그룹을 구축합니다.

모든 Pod는 etcd 데이터를 저장하기 위해 노드의/데이터/etcd 폴더를 불러옵니다.
또한 각 노드의 2379/2380번 포트를Pod의 2379/2380번 포트에 연결합니다.
각 노드의 2379/2380번 포트에 접근하여 etcd 서버에 연결할 수 있습니다.

검색 서버 준비


마스터 서버의 etcd가 http://192.168.137.20:2379에서 실행된다고 가정하고 발견자를 위해/discovery/test 이하를 사용합니다.
우선, 등록 집단의 크기.
지정한 수량의 etcd를 연결하지 않으면 시작하지 않기 때문에 노드 수량과 같은 값으로 설정합니다.(적당한 가격으로 설정하여 행동할 수 없는 문제가 발생했다.)
클러스터 크기가 검색자의 경로/_config/size를 등록합니다.
etcdctl --endpoints http://192.168.137.20:2379 set /discovery/test/_config/size 2

예제 코드


Dockerfile 및 시작 스크립트는 Githubhttps://github.com/mmitti/kube-etcd에 있습니다.
pod의 IP 주소를 찾기 위해python 스크립트를 통해 etcd를 이동합니다.
다음 두 Deamonset 환경 변수를 지정하십시오.
DISCOVERY: etcd 검색 주소 예제http://192.168.137.20:2379/v2/keys/discovery/test
DATADIR:etcd 데이터의 저장 경로는 hostPath를 마운트하는 경로와 같아야 합니다.
etcd.yaml
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  labels:
    name: etcd
  name: etcd
spec:
  template:
    metadata:
      labels:
        app: etcd
    spec:
      containers:
        - name: etcd
          image: mmitti/etcd
          imagePullPolicy: Always
          ports:
            - containerPort: 2379
              hostPort: 2379
              name: p1
            - containerPort: 2380
              hostPort: 2380
              name: p2
          env:
          - name: DISCOVERY
            value: http://192.168.137.20:2379/v2/keys/discovery/test
          - name: DATADIR
            value: /data
          volumeMounts:
          - name: etcd-data
            mountPath: /data
      volumes:
        - name: etcd-data
          hostPath:
            path: /data/etcd
---
apiVersion: v1
kind: Service
metadata:
  name: etcd
  labels:
    app: etcd
spec:
  ports:
  - port: 2379
    name: p1
  - port: 2380
    name: p2
  clusterIP: None
  selector:
    app: etcd

Kubernetes에 yaml을 등록합니다.
$ kubectl create -f etcd.yaml

동작 확인


Pod이 시작되었는지 확인합니다.
$ kubectl get po -l app=etcd
NAME         READY     STATUS    RESTARTS   AGE
etcd-9w1sw   1/1       Running   1          21h
etcd-zrn62   1/1       Running   1          21h
또한 각 Pod이 이동하는 노드를 확인합니다.
$ kubectl describe po  -l app=etcd
Name:           etcd-9w1sw
Namespace:      default
Node:           node1/192.168.137.21
--省略--
Name:           etcd-zrn62
Namespace:      default
Node:           node2/192.168.137.22
--省略--
마지막으로 etcd 서버에 값을 쓰고 읽으려고 합니다.
$ etcdctl --endpoints http://192.168.137.21:2379 set /hoge testtest
testtest

$ etcdctl --endpoints http://192.168.137.21:2379 get /hoge
testtest

$ etcdctl --endpoints http://192.168.137.22:2379 get /hoge
testtest
쓴 값만 읽으면 성공합니다.

보충하여 기록하다


노드가 재부팅되면 Pod의 IP 주소가 변경되어 통신이 불가능할 수 있습니다.
발견자에 등록된 IP 주소는 포드가 아니라 노드가 좋습니다.

좋은 웹페이지 즐겨찾기