使用kubeadm部署k8s集群02-配置etcd高可用

使用kubeadm部署k8s集群02-配置etcd高可用

2018/1/4

配置 etcd 高可用

  • 新建一个 2 节点的 etcd cluster
  • 查看 etcd 的状态
  • 迁移原来 master 节点上的 etcd 数据到上面新建的 etcd cluster 中
  • 切换 kube-apiserver 使用新的 etcd endpoint 地址
  • 清理掉原来的单节点 etcd 服务
  • 重建一个 etcd 服务,加入新集群
  • 部署新的 etcd 节点
  • 更新另外2个节点的 etcd.yaml 配置
新建一个 2 节点的 etcd cluster
### 基于当前 master 节点 tvm-00 的 etcd 配置来修改:
[[email protected] ~]# scp /etc/kubernetes/manifests/etcd.yaml 10.10.9.68:/tmp/
[[email protected] ~]# scp /etc/kubernetes/manifests/etcd.yaml 10.10.9.69:/tmp/

### 修改 etcd 配置,设置成一个全新的 cluster
[[email protected] ~]# cat /tmp/etcd.yaml
### (略过部分没有改动的输出内容)
spec:
  containers:
  - command:
    - etcd
    - --name=etcd-01
    - --initial-advertise-peer-urls=http://10.10.9.68:2380
    - --listen-peer-urls=http://10.10.9.68:2380
    - --listen-client-urls=http://127.0.0.1:2379,http://10.10.9.68:2379
    - --advertise-client-urls=http://10.10.9.68:2379
    - --initial-cluster-token=etcd-cluster
    - --initial-cluster=etcd-01=http://10.10.9.68:2380,etcd-02=http://10.10.9.69:2380
    - --initial-cluster-state=new
    - --data-dir=/var/lib/etcd
    image: gcr.io/google_containers/etcd-amd64:3.1.10
### (略过部分没有改动的输出内容)

[[email protected] ~]# cat /tmp/etcd.yaml
### (略过部分没有改动的输出内容)
spec:
  containers:
  - command:
    - etcd
    - --name=etcd-02
    - --initial-advertise-peer-urls=http://10.10.9.69:2380
    - --listen-peer-urls=http://10.10.9.69:2380
    - --listen-client-urls=http://127.0.0.1:2379,http://10.10.9.69:2379
    - --advertise-client-urls=http://10.10.9.69:2379
    - --initial-cluster-token=etcd-cluster
    - --initial-cluster=etcd-01=http://10.10.9.68:2380,etcd-02=http://10.10.9.69:2380
    - --initial-cluster-state=new
    - --data-dir=/var/lib/etcd
    image: gcr.io/google_containers/etcd-amd64:3.1.10
### (略过部分没有改动的输出内容)

### 启动 etcd cluster
### 配置文件同步到 manifests 后将会被 kubelet 检测到然后自动将 pod 启动
[[email protected] ~]# rm /var/lib/etcd -fr
[[email protected] ~]# cp -a /tmp/etcd.yaml /etc/kubernetes/manifests/

[[email protected] ~]# rm /var/lib/etcd -fr
[[email protected] ~]# cp -a /tmp/etcd.yaml /etc/kubernetes/manifests/
查看 etcd 的状态
### 下载一个 etcdctl 工具来管理集群:
[[email protected] ~]# cd /usr/local/bin/
[[email protected] ~]# wget https://github.com/coreos/etcd/releases/download/v3.1.10/etcd-v3.1.10-linux-amd64.tar.gz
[[email protected] ~]# tar zxf etcd-v3.1.10-linux-amd64.tar.gz
[[email protected] ~]# mv etcd-v3.1.10-linux-amd64/etcd* .
[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints "http://10.10.9.68:2379,http://10.10.9.69:2379" endpoint status
http://10.10.9.68:2379, 21b9c7066a7e525, 3.1.10, 25 kB, true, 7, 194
http://10.10.9.69:2379, 516e519b2158e83a, 3.1.10, 25 kB, false, 7, 194

### 注意:输出的列从左到右分别表示:endpoint URL, ID, version, database size, leadership status, raft term, and raft status.
### 符合预期。
迁移原来 master 节点上的 etcd 数据到上面新建的 etcd cluster 中
### 注意:etcdctl 3.x 版本提供了一个 make-mirror 功能来同步数据
### 在当前 master 节点 tvm-00 上执行:
[[email protected] ~]# ETCDCTL_API=3 etcdctl make-mirror --no-dest-prefix=true --endpoints=127.0.0.1:2379 --insecure-skip-tls-verify=true 10.10.9.68:2379

### 将数据同步到远端刚才新建的 etcd 集群中
### 注意1:数据是从 127.0.0.1:2379 写入到 10.10.9.68:2379
### 注意2:这个同步只能是手动中止,间隔 30s 打印一次输出

### 通过对比集群到状态来判断是否同步完成:
###(新开一个窗口)
[[email protected] ~]# ETCDCTL_API=3 etcdctl endpoint status
127.0.0.1:2379, 8e9e05c52164694d, 3.1.10, 1.9 MB, true, 2, 342021

[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints "http://10.10.9.68:2379,http://10.10.9.69:2379" endpoint status
http://10.10.9.68:2379, 21b9c7066a7e525, 3.1.10, 1.9 MB, true, 7, 1794
http://10.10.9.69:2379, 516e519b2158e83a, 3.1.10, 1.9 MB, false, 7, 1794
切换 kube-apiserver 使用新的 etcd endpoint 地址

### 停止 kubelet 服务:
[[email protected] ~]# systemctl stop kubelet

### 更新 kube-apiserver.yaml 中 etcd 服务到地址,切到我们到新集群中:
[[email protected] ~]# sed -i ‘s#127.0.0.1:2379#10.10.9.68:2379#‘ /etc/kubernetes/manifests/kube-apiserver.yaml

### 启动 kubelet 服务:
[[email protected] ~]# systemctl start kubelet
[[email protected] ~]# kubectl get pods --all-namespaces |grep ‘etcd-tvm‘
kube-system   etcd-tvm-00                      1/1       Running   1          4h
kube-system   etcd-tvm-01                      1/1       Running   0          1h
kube-system   etcd-tvm-02                      1/1       Running   0          1h
清理掉原来的单节点 etcd 服务
[[email protected] ~]# mv /etc/kubernetes/manifests/etcd.yaml /tmp/orig.master.etcd.yaml
[[email protected] ~]# mv /var/lib/etcd /tmp/orig.master.etcd
### 观察 pods 的变化:
[[email protected] ~]# kubectl get pods --all-namespaces |grep ‘etcd-tvm‘
kube-system   etcd-tvm-01                      1/1       Running   0          1h
kube-system   etcd-tvm-02                      1/1       Running   0          1h

### 符合预期 etcd-tvm-00 停止服务
重建一个 etcd 服务,加入新集群
[[email protected] ~]# cat /tmp/etcd.yaml
### (略过部分没有改动的输出内容)
spec:
  containers:
  - command:
    - etcd
    - --name=etcd-00
    - --initial-advertise-peer-urls=http://10.10.9.67:2380
    - --listen-peer-urls=http://10.10.9.67:2380
    - --listen-client-urls=http://127.0.0.1:2379,http://10.10.9.67:2379
    - --advertise-client-urls=http://10.10.9.67:2379
    - --initial-cluster-token=etcd-cluster
    - --initial-cluster=etcd-00=http://10.10.9.67:2380,etcd-01=http://10.10.9.68:2380,etcd-02=http://10.10.9.69:2380
    - --initial-cluster-state=existing
    - --data-dir=/var/lib/etcd
    image: gcr.io/google_containers/etcd-amd64:3.1.10
### (略过部分没有改动的输出内容)

### 注意:上述新节点的配置有一个地方不一样:
--initial-cluster-state=existing
  • 先配置 etcd cluster 增加一个 member 用于后续操作

    
    [[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints="http://10.10.9.68:2379" member list
    21b9c7066a7e525, started, etcd-01, http://10.10.9.68:2380, http://10.10.9.68:2379
    516e519b2158e83a, started, etcd-02, http://10.10.9.69:2380, http://10.10.9.69:2379

[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints="http://10.10.9.68:2379" member add etcd-00 --peer-urls=http://10.10.9.67:2380
Member 6cc2e7728adb6b28 added to cluster 3742ed98339167da

ETCD_NAME="etcd-00"
ETCD_INITIAL_CLUSTER="etcd-01=http://10.10.9.68:2380,etcd-02=http://10.10.9.69:2380,etcd-00=http://10.10.9.67:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints="http://10.10.9.68:2379" member list
21b9c7066a7e525, started, etcd-01, http://10.10.9.68:2380, http://10.10.9.68:2379
516e519b2158e83a, started, etcd-02, http://10.10.9.69:2380, http://10.10.9.69:2379
6cc2e7728adb6b28, unstarted, , http://10.10.9.67:2380,


##### 部署新的 etcd 节点
```bash
[[email protected] ~]# rm /var/lib/etcd -fr
[[email protected] ~]# cp -a /tmp/etcd.yaml /etc/kubernetes/manifests/

### 再次查看 k8s cluster 信息

[[email protected] ~]# kubectl get pods --all-namespaces |grep ‘etcd-tvm‘
kube-system   etcd-tvm-00                      1/1       Running   1          4h
kube-system   etcd-tvm-01                      1/1       Running   0          1h
kube-system   etcd-tvm-02                      1/1       Running   0          1h

### etcd 的日志:
[[email protected] ~]# kubectl logs -n kube-system --tail=20 etcd-tvm-00

### etcd clister 状态:
[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints="http://10.10.9.67:2379,http://10.10.9.68:2379,http://10.10.9.69:2379" member list
21b9c7066a7e525, started, etcd-01, http://10.10.9.68:2380, http://10.10.9.68:2379
516e519b2158e83a, started, etcd-02, http://10.10.9.69:2380, http://10.10.9.69:2379
6cc2e7728adb6b28, started, etcd-00, http://10.10.9.67:2380, http://10.10.9.67:2379

[[email protected] ~]# ETCDCTL_API=3 etcdctl --endpoints "http://10.10.9.67:2379,http://10.10.9.68:2379,http://10.10.9.69:2379" endpoint status
http://10.10.9.67:2379, 6cc2e7728adb6b28, 3.1.10, 3.8 MB, false, 7, 5236
http://10.10.9.68:2379, 21b9c7066a7e525, 3.1.10, 3.3 MB, true, 7, 5236
http://10.10.9.69:2379, 516e519b2158e83a, 3.1.10, 3.3 MB, false, 7, 5236
更新另外2个节点的 etcd.yaml 配置
### 区别之处:

- --initial-cluster=etcd-00=http://10.10.9.67:2380,etcd-01=http://10.10.9.68:2380,etcd-02=http://10.10.9.69:2380
- --initial-cluster-state=existing

### 将节点 tvm-00 上 kube-apiserver 使用的 etcd endpoint 切换回来
[[email protected] ~]# sed -i ‘s#10.10.9.68:2379#127.0.0.1:2379#‘ /etc/kubernetes/manifests/kube-apiserver.yaml
[[email protected] ~]# kubectl get pods --all-namespaces |grep api
kube-system   kube-apiserver-tvm-00            1/1       Running   0          1m

原文地址:http://blog.51cto.com/nosmoking/2062887

时间: 2024-10-11 13:13:48

使用kubeadm部署k8s集群02-配置etcd高可用的相关文章

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver 2018/1/4 配置 LB 指向 kube-apiserver 小目标:在 3 个 master 节点前,还需配置一个 LB 来作为 apiserver 的入口 LB -> master x3 直接使用阿里云内网 SLB L4 proxy 资源(本次实例是 4 层而不使用 7 层的原因是:跳过了处理证书的环节) 申请下来资源后,将得到一个 vip 指向上述 3 个 master 节点的 IP 作为后端真实服务器 注

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver 2018/1/4 配置 kubectl 访问 kube-apiserver 切换 master 节点连接到本节点的 apiserver 确认集群信息 切换 master 节点连接到本节点的 apiserver ### 为了在这 2 个新的节点执行 kubectl 需要配置 admin.yaml [[email protected] ~]# mkdir -p ~/k8s_install/master/admi

使用kubeadm部署k8s集群01-初始化

使用kubeadm部署k8s集群01-初始化 2018/1/3 节点配置 master x3 OS version: centos7 swapoff ### 阿里云默认:off hosts ### 每个节点上配置: [[email protected] ~]# cat /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 Docker version: latest(17.0

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点 2018/1/4 扩容 kube-scheduler 到 3 节点 连接到本节点的 apiserver [[email protected] kube-controller-manager]# cat /etc/kubernetes/manifests/kube-scheduler.yaml |grep '/etc/kubernetes' --kubeconfig=/etc/kubernetes/scheduler.

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点 2018/1/3 扩容 kube-apiserver 到 3 节点 配置 kube-apiserver.yaml 分析 kube-apiserver 依赖的证书 为新节点生成专属证书 下发证书到对应的节点 确认每个节点的 apiserver 是否处于 Running 状态 配置 kube-apiserver.yaml ### 拷贝原 master 上的配置: [[email protected] ~]# mkdir

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1

Kubernetes/3.使用Kubeadm部署k8s集群

使用Kubeadm部署k8s集群 kubeadm是一个提供了"kubeadm init"和"kubeadm join"最佳实践命令,且用于快速构建一个kubernetes集群的工具,你可以使用此工具快速构建一个kubernetes学习环境.通过本章节的学习,你将能够使用kubeadm工具,成功构建出一个基础的kubernetes集群环境. 环境准备 Hosts文件准备 Docker环境配置 其他准备工作 使用Kubeadm部署k8s集群 参考文档 备注 环境准备 i

使用kubeadm部署k8s集群00-缓存gcr.io镜像

使用kubeadm部署k8s集群00-缓存gcr.io镜像 2018/2/7 原因:kubeadm init 时,需要下载一些镜像,但国内网络原因,大家懂的,不容易下载,此时,只能去绕过它.备注:官方在 1.5 收到阿里一位童鞋的 PR 来允许指定一个第三方的 registry 来解决上述问题,但因为时间所限,并未找到具体的操作方法. [在国外节点上操作] 镜像来源 针对下述镜像: gcr.io/google_containers/kube-apiserver-amd64:v1.9.0 gcr.