前言:本次搭建集群使用的是Hostpath挂在容器硬盘,如果需要使用PV与PVC则百度参考配置即可,本文档默认机器已安装docker环境
构建ETCD镜像,方便后续做集群
#1.拉取镜像制作etcd的基础镜像
dockerpullarabkin/centos7-tools:latest
#2.启动镜像进入操作
dockerrun-itd-p
12379:2379--privileged=true--nameetcd-service
arabkin/centos7-tools:latest/sbin/init
#3.进入容器以及进入后切换到/opt目录
docker exec -it 你的容器ID /bin/bash
cd /opt
#4.安装Linux的下载工具
yum install wget -y
#5.下载etcd源码
wget https://github.com/etcd-io/etcd/releases/download/v3.4.21/etcd-v3.4.21-
linux-amd64.tar.gz
#6.解压压缩包以及拷贝命令到sbin下
tar zxvf etcd-v3.5.4-linux-amd64.tar.gz && cd etcd-v3.4.21-linux-amd64/ && cp etcd /usr/bin/etcd && cp etcdctl
/usr/bin/etcdctl
#7.制作启动与创建集群脚本
echo '#!/bin/bash
/usr/bin/etcd --data-dir=/var/lib/etcd --name=${MY_POD_NAME} --listen-peer-urls=http://0.0.0.0:2380 --listen-client-urls=http://0.0.0.0:2379 --advertise-client-urls=http://${MY_POD_NAME}.${SERVICE_NAME}.${CLUSTER_NAMESPACE}:2379 --initial-advertise-peer-urls=http://${MY_POD_NAME}.${SERVICE_NAME}.${CLUSTER_NAMESPACE}:2380 --initial-cluster-state=new --initial-cluster-token=etcd-cluster-token --initial-cluster=${INITIAL_CLUSTER}' >etcd.sh
#8.退出容器开始构建镜像
exit
#9.构建镜像命令
docker commit 容器ID etcd_server:v1
#创建pod以及service服务
#1.创建etcd service服务
cat etcd-clusterip.yaml
apiVersion: v1
kind: Service
metadata:
name: etcd-headless
namespace: etcd-cluster #根据自己定义放在哪个命名空间
labels:
app: etcd
spec:
ports:
- port: 2380
name: etcd-server
- port: 2379
name: etcd-client
clusterIP: None
selector:
app: etcd
publishNotReadyAddresses: true
#2.创建etcd service服务nodeport (不是必要的,不对外开放端口可忽略)
cat etcd-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: etcd
name: etcd-svc
namespace: liulei
spec:
ports:
- name: etcd-cluster
port: 2379
targetPort: 2379
selector:
app: etcd
sessionAffinity: None
type: NodePort
#3.部署etcd服务
cat etcd-StatefulSet.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: etcd
name: etcds #pod名字,需要修改自行解决
namespace: etcd-cluster #选择命名空间
spec:
podManagementPolicy: OrderedReady
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: etcd
serviceName: etcd-headless
template:
metadata:
labels:
app: etcd
name: etcd
spec:
containers:
- args:
- sh
- /opt/etcd.sh
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: CLUSTER_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: SERVICE_NAME
value: etcd-headless
- name: INITIAL_CLUSTER
value: >-
etcds-0=http://etcds-0.etcd-headless.etcd-cluster:2380,etcds-1=http://etcds-1.etcd-headless.etcd-cluster:2380,etcds-2=http://etcds-2.etcd-headless.etcd-cluster:2380 #此处根据上方pod名字以及命令空间的修改而进行修改,默认不修改则直接使用
image: 'registry.cn-hangzhou.aliyuncs.com/xxxx/etcd_server:v1.0' #示范不提供真正的镜像
imagePullPolicy: Always
name: etcd
ports:
- containerPort: 2380
name: peer
protocol: TCP
- containerPort: 2379
name: client
protocol: TCP
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/etcd
name: volume-1666700485479 #存储卷名字
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qqby-docker-pull
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- hostPath:
path: /opt/etcdq
type: DirectoryOrCreate
name: volume-1666700485479 #存储卷名字如果变动上方也要变动,使用的是hostpath功能
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
本次安装就到这里结束了,如果想验证是否集群可以在百度查找命令验证或者本问下面提供的几条验证数据
#找一个节点进入终端put 一些数据
etcdctl put /test 'test'
etcdctl put /test1 'test1'
etcdctl put /test2 'test2'
#在找另外两个节点查看是否有数据,有则集群创建成功了
etcdctl get /test --prefix