1.2、部署etcd集群

  • 所有master节点需要etcd(复用master节点,也可以独立三节点部署etcd,只要kubernetes集群可以访问即可)
1.2.0、下载etcd二进制文件
  1. k8s-01:~ # cd /opt/k8s/packages/
  2. k8s-01:/opt/k8s/packages # wget https://github.com/etcd-io/etcd/releases/download/v3.4.12/etcd-v3.4.12-linux-amd64.tar.gz
  3. k8s-01:/opt/k8s/packages # tar xf etcd-v3.4.12-linux-amd64.tar.gz
1.2.1、创建etcd证书和私钥
  1. k8s-01:~ # cd /opt/k8s/ssl
  2. k8s-01:/opt/k8s/ssl # cat > etcd-csr.json <<EOF
  3. {
  4. "CN": "etcd",
  5. "hosts": [
  6. "127.0.0.1",
  7. "192.168.72.39",
  8. "192.168.72.40",
  9. "192.168.72.41"
  10. ],
  11. "key": {
  12. "algo": "rsa",
  13. "size": 2048
  14. },
  15. "names": [
  16. {
  17. "C": "CN",
  18. "ST": "ShangHai",
  19. "L": "ShangHai",
  20. "O": "k8s",
  21. "OU": "bandian"
  22. }
  23. ]
  24. }
  25. EOF
  • host字段指定授权使用该证书的etcd节点IP域名列表,需要将etcd集群的3个节点都添加其中
1.2.2、生成etcd证书和私钥
  1. k8s-01:/opt/k8s/ssl # cfssl gencert -ca=/opt/k8s/ssl/ca.pem \
  2. -ca-key=/opt/k8s/ssl/ca-key.pem \
  3. -config=/opt/k8s/ssl/ca-config.json \
  4. -profile=kubernetes etcd-csr.json | cfssljson -bare etcd
1.2.3、配置etcd为systemctl管理
  1. k8s-01:~ # cd /opt/k8s/conf/
  2. k8s-01:/opt/k8s/conf # source /opt/k8s/bin/k8s-env.sh
  3. k8s-01:/opt/k8s/conf # cat > etcd.service.template <<EOF
  4. [Unit]
  5. Description=Etcd Server
  6. After=network.target
  7. After=network-online.target
  8. Wants=network-online.target
  9. Documentation=https://github.com/coreos
  10. [Service]
  11. Type=notify
  12. WorkingDirectory=${ETCD_DATA_DIR}
  13. ExecStart=/opt/k8s/bin/etcd \\
  14. --data-dir=${ETCD_DATA_DIR} \\
  15. --wal-dir=${ETCD_WAL_DIR} \\
  16. --name=##NODE_NAME## \\
  17. --cert-file=/etc/etcd/cert/etcd.pem \\
  18. --key-file=/etc/etcd/cert/etcd-key.pem \\
  19. --trusted-ca-file=/etc/kubernetes/cert/ca.pem \\
  20. --peer-cert-file=/etc/etcd/cert/etcd.pem \\
  21. --peer-key-file=/etc/etcd/cert/etcd-key.pem \\
  22. --peer-trusted-ca-file=/etc/kubernetes/cert/ca.pem \\
  23. --peer-client-cert-auth \\
  24. --client-cert-auth \\
  25. --listen-peer-urls=https://##NODE_IP##:2380 \\
  26. --initial-advertise-peer-urls=https://##NODE_IP##:2380 \\
  27. --listen-client-urls=https://##NODE_IP##:2379,http://127.0.0.1:2379 \\
  28. --advertise-client-urls=https://##NODE_IP##:2379 \\
  29. --initial-cluster-token=etcd-cluster-0 \\
  30. --initial-cluster=${ETCD_NODES} \\
  31. --initial-cluster-state=new \\
  32. --auto-compaction-mode=periodic \\
  33. --auto-compaction-retention=1 \\
  34. --max-request-bytes=33554432 \\
  35. --quota-backend-bytes=6442450944 \\
  36. --heartbeat-interval=250 \\
  37. --election-timeout=2000 \\
  38. --enable-v2=true
  39. Restart=on-failure
  40. RestartSec=5
  41. LimitNOFILE=65536
  42. [Install]
  43. WantedBy=multi-user.target
  44. EOF
  • WorkDirectory--data-dir 指定etcd工作目录和数据存储为${ETCD_DATA_DIR},需要在启动前创建这个目录 (后面会有创建步骤)
  • --wal-dir 指定wal目录,为了提高性能,一般使用SSD和–data-dir不同的盘
  • --name 指定节点名称,当–initial-cluster-state值为new时,–name的参数值必须位于–initial-cluster列表中
  • --cert-file--key-file etcd server与client通信时使用的证书和私钥
  • --trusted-ca-file 签名client证书的CA证书,用于验证client证书
  • --peer-cert-file--peer-key-file etcd与peer通信使用的证书和私钥
  • --peer-trusted-ca-file 签名peer证书的CA证书,用于验证peer证书
1.2.4、分发etcd证书和启动文件到其他etcd节点
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for (( i=0; i < 3; i++ ))
  4. do
  5. sed -e "s/##NODE_NAME##/${MASTER_NAMES[i]}/" \
  6. -e "s/##NODE_IP##/${ETCD_IPS[i]}/" \
  7. /opt/k8s/conf/etcd.service.template > /opt/k8s/conf/etcd-${ETCD_IPS[i]}.service
  8. done
  9. for host in ${ETCD_IPS[@]}
  10. do
  11. printf "\e[1;34m${host}\e[0m\n"
  12. scp /opt/k8s/packages/etcd-v3.4.12-linux-amd64/etcd* ${host}:/opt/k8s/bin/
  13. scp /opt/k8s/conf/etcd-${host}.service ${host}:/etc/systemd/system/etcd.service
  14. scp /opt/k8s/ssl/etcd*.pem ${host}:/etc/etcd/cert/
  15. done
1.2.5、配置并启动etcd服务
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for host in ${ETCD_IPS[@]}
  4. do
  5. printf "\e[1;34m${host}\e[0m\n"
  6. ssh root@${host} "mkdir -p ${ETCD_DATA_DIR} ${ETCD_WAL_DIR}"
  7. ssh root@${host} "chmod 700 ${ETCD_DATA_DIR}"
  8. ssh root@${host} "systemctl daemon-reload && \
  9. systemctl enable etcd && \
  10. systemctl restart etcd && \
  11. systemctl status etcd | grep Active"
  12. done
  • 如果第一个回显是failed,先别着急取消,若后面两个节点的回显是running就没有问题了,这是集群的机制,如下显示是正常的
  1. 192.168.72.39
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /etc/systemd/system/etcd.service.
  3. Job for etcd.service failed because a timeout was exceeded. See "systemctl status etcd.service" and "journalctl -xe" for details.
  4. 192.168.72.40
  5. Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /etc/systemd/system/etcd.service.
  6. Active: active (running) since Sat 2021-02-13 00:27:24 CST; 16ms ago
  7. 192.168.72.41
  8. Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /etc/systemd/system/etcd.service.
  9. Active: active (running) since Sat 2021-02-13 00:27:25 CST; 6ms ago
1.2.6、验证etcd集群状态
  • 在k8s-01机器执行就可以了,既然是集群,在哪执行,都是可以获取到信息的
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for host in ${ETCD_IPS[@]}
  4. do
  5. printf "\e[1;34m${host}\e[0m\n"
  6. ETCDCTL_API=3 /opt/k8s/bin/etcdctl \
  7. --endpoints=https://${host}:2379 \
  8. --cacert=/etc/kubernetes/cert/ca.pem \
  9. --cert=/etc/etcd/cert/etcd.pem \
  10. --key=/etc/etcd/cert/etcd-key.pem endpoint health
  11. done
  • 如下显示successfully committed proposal则表示集群正常
  1. 192.168.72.39
  2. https://192.168.72.39:2379 is healthy: successfully committed proposal: took = 9.402229ms
  3. 192.168.72.40
  4. https://192.168.72.40:2379 is healthy: successfully committed proposal: took = 10.247073ms
  5. 192.168.72.41
  6. https://192.168.72.41:2379 is healthy: successfully committed proposal: took = 11.01422ms

suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群的更多相关文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第13章 - 部署metrics-server插件

    文章目录 1.13.0.创建metrics-server证书和私钥 1.13.1.生成metrics-server证书和私钥 1.13.2.开启kube-apiserver聚合配置 1.13.3.分发 ...

  2. suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件

    文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第04章 - 部署docker服务

    文章目录 1.4.部署docker 1.4.0.下载docker二进制文件 1.4.1.配置docker镜像加速 1.4.2.配置docker为systemctl管理 1.4.3.启动docker服务 ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第05章 - 部署kube-nginx

    文章目录 1.5.部署kube-nginx 1.5.0.下载nginx二进制文件 1.5.1.编译部署nginx 1.5.2.配置nginx.conf 1.5.3.配置nginx为systemctl管 ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件

    文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...

  7. suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件

    文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第10章 - 部署kube-proxy组件

    文章目录 1.10.部署kube-proxy 1.10.0.创建kube-proxy证书 1.10.1.生成kube-proxy证书和秘钥 1.10.2.创建kube-proxy的kubeconfig ...

随机推荐

  1. centos 目录结构

    bin -----存放命令的目录(bin目录是快捷方式)是/usr/bin的快捷方式 sbin ----只有root用户才能使用的命令 etc ----系统服务的配置文件 /usr/local --- ...

  2. Hive的连接和运行模式

    原文链接: https://www.toutiao.com/i6771018203687551495/ Hive的连接 启动hadoop的时候将history也启动,如果出问题,可以方便我们后续定位 ...

  3. 深度分析 [go的HttpClient读取Body超时]

    故障现场 本人负责的主备集群,发出的 HttpClient 请求有 30%概率超时, 报context deadline exceeded (Client.Timeout or context can ...

  4. phpAdmin写webshell的方法

    一.常规导入shell的操作    创建数据表导出shell    CREATE TABLE `mysql`.`shadow9` (`content` TEXT NOT NULL );    INSE ...

  5. linux 安装 Logtash 同步mysql数据到Elasticsearch

    官网下载Logtash 离线安装包 下载地址 https://www.elastic.co/cn/downloads/logstash 需要注意版本与es 对应 新建配置文件 新建文件夹 mkdir  ...

  6. 【vps】如何在vps上安装mirai机器人?

    [vps]如何在vps上安装mirai机器人? 前言 由于某位师傅在群里设置了一个bot,吸引了我,所以我之前找他问了点bot的相关知识,这几天正好服务器搬迁,所以就在新服务器上再装一遍bot 1.安 ...

  7. centos下APUE 例程编译-解决报错与改写例子名字。

    首先是编译生成libapue.a的库文件.按照readme的说法很简单改个目录make一下就好,但是在centos下还是有错.通过下面这篇博文<<UNIX环境高级编程中的apue.h错误& ...

  8. Servlet Filter(过滤器)

    Servlet Filter 又称 Servlet 过滤器,它是在 Servlet 2.3 规范中定义的,能够对 Servlet 容器传给 Web 资源的 request 对象和 response 对 ...

  9. 关于一键提取QQ群成员信息的记录

    问题情境 昨天晚上回宿舍看到舍友在吐槽:天哪,我要把70多个人的QQ号全统计出来,只能一个一个地在咱们学院的学院群里找.吐了. 当时我第一反应是用python写个脚本之类的去做,因此查阅了一下资料,找 ...

  10. Pycharm新建文件时头部模板的配置方法

    方法