K8s单Master部署

素颜马尾好姑娘i 2023-10-04 08:41 43阅读 0赞

文章目录

  • 一、配置etcd
    • 1.1 制作etcd证书文件
      • 1.1.1 下载cfssl
      • 1.1.2 生成etcd证书文件
    • 1.2 配置etcd
    • 1.3 node1,node2上配置etcd
  • 二、flannel网络配置

K8s单Master部署

  • 环境:一台master,ip:20.0.0.10 安装etcd
  • 两台node节点:

    • node1:ip:20.0.0.11 安装etcd,flannel
    • node2:ip:20.0.0.12 安装etcd,flannel

##部署etcd思路:需要下载etcd二进制文件,解压使用其中的etcd和etcdctl可执行文件;需要etcd证书文件,使用cfssl证书工具;需要编辑etcd配置文件,搭建etcd群集。
##部署flannel网络思路:将要配置的节点ip写入etcd中,以便flannel能够识别。构建开启flannel网络并修改docker service文件使得docker能够支持flannel网络。

一、配置etcd

1.1 制作etcd证书文件

1.1.1 下载cfssl

  1. curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
  2. curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
  3. curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
  4. chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
  5. 文件放在/usr/local/bin/目录下方便执行

1.1.2 生成etcd证书文件

编辑shell脚本来制作证书文件

  1. mkdir /root/k8s/etcd-cert/
  2. cd /root/k8s/etcd-cert/
  3. vim etcd-cert.sh
  4. cat > ca-config.json <<EOF
  5. {
  6. "signing": {
  7. "default": {
  8. "expiry": "87600h"
  9. },
  10. "profiles": {
  11. "www": {
  12. "expiry": "87600h",
  13. "usages": [
  14. "signing",
  15. "key encipherment",
  16. "server auth",
  17. "client auth"
  18. ]
  19. }
  20. }
  21. }
  22. }
  23. EOF
  24. cat > ca-csr.json <<EOF
  25. {
  26. "CN": "etcd CA",
  27. "key": {
  28. "algo": "rsa",
  29. "size": 2048
  30. },
  31. "names": [
  32. {
  33. "C": "CN",
  34. "L": "Nanjing",
  35. "ST": "Nanjing"
  36. }
  37. ]
  38. }
  39. EOF
  40. cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
  41. #-----------------------
  42. cat > server-csr.json <<EOF
  43. "hosts": [
  44. "20.0.0.10",
  45. "20.0.0.11",
  46. "20.0.0.12"
  47. ],
  48. "key": {
  49. "algo": "rsa",
  50. "size": 2048
  51. },
  52. "names": [
  53. {
  54. "C": "CN",
  55. "L": "Nanjing",
  56. "ST": "Nanjing"
  57. }
  58. ]
  59. }
  60. EOF
  61. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

执行脚本生成证书

  1. sh /root/k8s/etcd-cert/etcd-cert.sh

1.2 配置etcd

  1. 下载etcd二进制文件
  2. etcd下载地址 https://github.com/etcd-io/etcd/releases
  3. tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
  4. mkdir -p /opt/etcd/{bin,cfg,ssl}
  5. cp k8s/etcd-cert/*.pem /opt/etcd/ssl/
  6. mv etcd etcdctl /opt/etcd/bin/
  7. 编写配置etcd的shell脚本
  8. vim etcd.sh
  9. #!/bin/bash
  10. ETCD_NAME=$1
  11. ETCD_IP=$2
  12. ETCD_CLUSTER=$3
  13. WORK_DIR=/opt/etcd
  14. cat <<EOF >$WORK_DIR/cfg/etcd
  15. #[Member]
  16. ETCD_NAME="${ETCD_NAME}"
  17. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  18. ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"
  19. ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"
  20. #[Clustering]
  21. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
  22. ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"
  23. ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"
  24. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  25. ETCD_INITIAL_CLUSTER_STATE="new"
  26. EOF
  27. cat <<EOF >/usr/lib/systemd/system/etcd.service
  28. [Unit]
  29. Description=Etcd Server
  30. After=network.target
  31. After=network-online.target
  32. Wants=network-online.target
  33. [Service]
  34. Type=notify
  35. EnvironmentFile=${WORK_DIR}/cfg/etcd
  36. ExecStart=${WORK_DIR}/bin/etcd \
  37. --name=\${ETCD_NAME} \
  38. --data-dir=\${ETCD_DATA_DIR} \
  39. --listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
  40. --listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
  41. --advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \
  42. --initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
  43. --initial-cluster=\${ETCD_INITIAL_CLUSTER} \
  44. --initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \
  45. --initial-cluster-state=new \
  46. --cert-file=${WORK_DIR}/ssl/server.pem \
  47. --key-file=${WORK_DIR}/ssl/server-key.pem \
  48. --peer-cert-file=${WORK_DIR}/ssl/server.pem \
  49. --peer-key-file=${WORK_DIR}/ssl/server-key.pem \
  50. --trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
  51. --peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
  52. Restart=on-failure
  53. LimitNOFILE=65536
  54. [Install]
  55. WantedBy=multi-user.target
  56. EOF
  57. ##启动etcd
  58. systemctl daemon-reload
  59. systemctl enable etcd
  60. systemctl restart etcd

执行脚本

  1. sh etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380
  2. netstat -anpt | grep etcd
  3. 此时只显示只配置了一个etcd节点,还没有配置etcd集群。
  4. master上的etcd配置完毕

1.3 node1,node2上配置etcd

  1. ##配置其他两个node节点上的etcd,只需要将master上的/opt/etcd/目录和/usr/lib/systemd/system/etcd.service文件scp到各节点上。
  2. 然后修改配置文件/opt/etcd/cfg/etcd中的节点name和节点的ip即可。然后启动etcd服务即可。
  3. master节点上操作
  4. scp -r /opt/etcd/ root@20.0.0.11:/opt/
  5. scp -r /opt/etcd/ root@20.0.0.12:/opt/
  6. scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/
  7. scp /usr/lib/systemd/system/etcd.service root@20.0.0.12:/usr/lib/systemd/system/
  8. ##去到node1,node2节点上更改配置
  9. node1配置如下,node2同理
  10. root@node1 ~]# tree /opt/etcd/
  11. /opt/etcd/
  12. ├── bin
  13. ├── etcd
  14. └── etcdctl
  15. ├── cfg
  16. └── etcd
  17. └── ssl
  18. ├── ca-key.pem
  19. ├── ca.pem
  20. ├── server-key.pem
  21. └── server.pem
  22. 3 directories, 7 files
  23. vim /opt/etcd/cfg/etcd
  24. #[Member]
  25. ETCD_NAME="etcd02"
  26. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  27. ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380"
  28. ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379"
  29. #[Clustering]
  30. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380"
  31. ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"
  32. ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
  33. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  34. ETCD_INITIAL_CLUSTER_STATE="new"
  35. ##启动etcd
  36. systemctl start etcd
  37. systemctl enable etcd
  38. 然后在master上检查集群健康状态
  39. /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
  40. 检查通过,etcd二进制集群配置完成。

二、flannel网络配置

  1. ##在任意配置了etcd的节点上写入分配的子网到etcd中,供flannel使用
  2. cd /opt/etcd/ssl/
  3. /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" set /coreos.com/network/config '{"Network": "172.17.0.0/16","Backend": {"Type": "vxlan"}}'
  4. ##查看
  5. /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" get /coreos.com/network/config
  6. ##node1,node2上导入flannel二进制文件包,
  7. tar zxvf flannel-v0.10.0-linux-amd64.tar.gz -C /tmp/
  8. mkdir /opt/kubernetes/{cfg,bin,ssl} -p
  9. cd /tmp
  10. mv mk-docker-opts.sh flanneld /opt/kubernetes/bin/
  11. ##编写搭建flannel网络脚本
  12. vim flannel.sh
  13. #!/bin/bash
  14. ETCD_ENDPOINTS=${1:-"http://127.0.0.1:2379"}
  15. cat <<EOF >/opt/kubernetes/cfg/flanneld
  16. FLANNEL_OPTIONS="--etcd-endpoints=${ETCD_ENDPOINTS} \
  17. -etcd-cafile=/opt/etcd/ssl/ca.pem \
  18. -etcd-certfile=/opt/etcd/ssl/server.pem \
  19. -etcd-keyfile=/opt/etcd/ssl/server-key.pem"
  20. EOF
  21. cat <<EOF >/usr/lib/systemd/system/flanneld.service
  22. [Unit]
  23. Description=Flanneld overlay address etcd agent
  24. After=network-online.target network.target
  25. Before=docker.service
  26. [Service]
  27. Type=notify
  28. EnvironmentFile=/opt/kubernetes/cfg/flanneld
  29. ExecStart=/opt/kubernetes/bin/flanneld --ip-masq \$FLANNEL_OPTIONS
  30. ExecStartPost=/opt/kubernetes/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
  31. Restart=on-failure
  32. [Install]
  33. WantedBy=multi-user.target
  34. EOF
  35. systemctl daemon-reload
  36. systemctl enable flanneld
  37. systemctl restart flanneld

##开启flannel网络功能

  1. sh flannel.sh https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379

##配置docker连接flannel网络

  1. vim /usr/lib/systemd/system/docker.service
  2. ...
  3. # for containers run by docker
  4. ####添加如下两条语句
  5. EnvironmentFile=/run/flannel/subnet.env
  6. Execstart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS -H fd:// --containerd=/run/containerd/containerd.sock
  7. ...

注:同时可以再/run/flannel/subnet.env文件下看到flannel子网环境变量
##重启docker服务

  1. systemctl daemon-reload
  2. systemctl restart docker
  3. ##查看flannel网络
  4. ifconfig

##验证:两节点上分别创建容器,进入容器中查看网络,同时两容器互相ping测试是否能ping通

  1. docker run -it centos:7 /bin/bash
  2. yum -y install net-tools
  3. ifconfig ##容器中查看网络
  4. ping另一个节点的容器ip,如果能ping通则表示flannel网络构建成功,docker可以识别flannel网络。

发表评论

表情:
评论列表 (有 0 条评论,43人围观)

还没有评论,来说两句吧...

相关阅读