k8s 二进制集群部署


写在之前

只2017年开始,断断续续的接触k8s也是有几个年头了,从1.11开始到现在马上都1.20了,真快呀!之前就有想整理下所有技术的想法,毕竟已经35岁的人,闯荡江湖已经12个年头了。是该总结下了,这行说实话干不了几年了。话不多说,等专门写一篇感慨的文章。开整!

一. k8s简介

这块我不会讲的太多,毕竟k8s一个很大的体系,不是一两句话或者两三句话就可以说清楚的。可能说的太深了我也未必能说的清楚,主要是说不清楚吧。但是简单的我还是要说下,主要是应对面试吧。但是说实话理论这事儿干的深了很重要的,在排错的时候,如果有理论加持会事半功倍,很容易地位错误。如果对于理论不大理解,那就是撞大运。想想是不是应该多写点理论? 还是算了吧,等等看,时间充足了,再说吧。

1. k8s 的整体架构

这块不太多说了,先上图。不是我自己画的,copy哪个大仙的,有侵权的喊我。我换其他大仙的。

总体来说k8s可以分为两个部分,master和node两个部分。

  • master 由四个模块组成,APIServer,schedule,controller-manager,etcd.

APIServer: APIServer负责对外提供RESTful的kubernetes API的服务,它是系统管理指令的统一接口,任何对资源的增删该查都要交给APIServer处理后再交给etcd,kubectl(kubernetes提供的客户端工具,该工具内部是对kubernetes API的调用)是直接和APIServer交互的。

schedule: schedule负责调度Pod到合适的Node上,如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定。 kubernetes目前提供了调度算法,同样也保留了接口。用户根据自己的需求定义自己的调度算法。

controller manager: 如果APIServer做的是前台的工作的话,那么controller manager就是负责后台的。每一个资源都对应一个控制器。而controller manager就是负责管理这些控制器的,比如我们通过APIServer创建了一个Pod,当这个Pod创建成功后,APIServer的任务就算完成了。

etcd:etcd是一个高可用的键值存储系统,kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。

  • Node节点主要由三个模板组成:kublet, kube-proxy,Docker

kube-proxy: 该模块实现了kubernetes中的服务发现和反向代理功能。kube-proxy支持TCP和UDP连接转发,默认基Round Robin算法将客户端流量转发到与service对应的一组后端pod。服务发现方面,kube-proxy使用etcd的watch机制监控集群中service和endpoint对象数据的动态变化,并且维护一个service到endpoint的映射关系,从而保证了后端pod的IP变化不会对访问者造成影响,另外,kube-proxy还支持session affinity。

kublet:kublet是Master在每个Node节点上面的agent,是Node节点上面最重要的模块,它负责维护和管理该Node上的所有容器,但是如果容器不是通过kubernetes创建的,它并不会管理。本质上,它负责使Pod的运行状态与期望的状态一致。

Docker:进行容器生成、配置和使用,作为pod节点的重要支撑。

这玩意儿就说到这里,再详细的不多学了,我不做大自然的搬运工了。面试的话基本上就问这些基本的,往深了就是pod,pv,pvc这类的。等专门写写这块内容。其他也就没嘛了,面试官也不太敢往深了搞,关键是他也的会哈,百分之八十的都是这样,当然牛人也是很多的。

2. 部署说明

首先需要说明的是,为了快捷很多东西直接用ansible做的,简单的ansible的命令,没有涉及到playbook的东西,以后可能会做一套这东西。但是现在觉得没拿必要。如果哪位同志想搞这块的内容,可以单独的找我,咱们一起探讨。还有,我内网做了本地dns,直接采用相关域名操作,没有进行主机的后饰条文件设置。最后,我自己做了本地的yum源,很多包可能在网络部署的时候会没有,这个别担心自己找找就可以,没什么大不了的事儿。不能指着一篇文档发家致富,工作很多时候还的靠自己。我这边做的是我们的测试环境,线上环境大同小异,也是这个样做的,我们的node节点大概会有十几台,我这里会写一台吧,如果说不清可能最多写两台node节点。另外我的ansible是单独的一台机器。各位战友可根据自己的环境进行调整,不多说了,具体规划如下:

角色

ip

主机名称

组件

master-01

10.120.200.2

k8s-master01.k8s.com

kube-apiserver,kube-controller-manager,kube-scheduler,etcd

master-02

10.120.200.3

k8s-master02.k8s.com

kube-apiserver,kube-controller-manager,kube-scheduler,etcd

node-01

10.120.200.10

k8s-node01.k8s.com

kubelet,kube-proxy,docker, etcd

node-02

10.120.200.4

k8s-node02.k8s.com

kubelet,kube-proxy,docker ,ansible

3. ansible host文件说明

[master]

k8s-master01.k8s.com
k8s-master02.k8s.com

[node]
k8s-node01.k8s.com
k8s-node02.k8s.com

[etcd]
k8s-master01.k8s.com
k8s-master02.k8s.com
k8s-node07.k8s.com

二. 基础系统部署

1. 设置关闭防火墙及SELINUX

 
  1. ansible all -m shell -a "systemctl stop firewalld && systemctl disable firewalld"

  2. ansible all -m shell -a "setenforce 0"

  3. ansible all -m shell -a "yum install yum-utils -y"

  4. ansible all -m shell -a "sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config"

2. 关闭Swap

 
  1. ansible all -m shell -a "swapoff -a && sysctl -w vm.swappiness=0"

  2. ansible all -m shell -a "sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab"

3.升级linux内核

 
  1. ansible all -m shell -a "mkdir /data/"

  2. ansible all -m copy -a "src=./kernel-ml-5.11.8-1.el7.elrepo.x86_64.rpm dest=/data/ "

  3. ansible all -m shell -a "chdir=/data rpm -ivh kernel-ml-5.11.8-1.el7.elrepo.x86_64.rpm"

  4. ansible all -m shell -a "grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg"

  5. #查看启动默认内核指向上面安装的内核

  6. ansible all -m shell -a "grubby --default-kernel"

  7. #顺手更新下系统,由于使用yum update命令更新,时间或者显示的问题可能有用ansible会有错误。可以到每台机器上去执行命令

  8. ansible all -m shell -a "yum update -y"

  9. ansible all -m shell -a "reboot"

4.优化内核参数

 
  1. cat > kubernetes.conf <<EOF

  2. net.bridge.bridge-nf-call-iptables=1

  3. net.bridge.bridge-nf-call-ip6tables=1

  4. net.ipv4.ip_forward=1

  5. #net.ipv4.tcp_tw_recycle=0

  6. vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它

  7. vm.overcommit_memory=1 # 不检查物理内存是否够用

  8. vm.panic_on_oom=0 # 开启 OOM

  9. fs.inotify.max_user_instances=8192

  10. fs.inotify.max_user_watches=1048576

  11. fs.file-max=52706963

  12. fs.nr_open=52706963

  13. net.ipv6.conf.all.disable_ipv6=1

  14. net.netfilter.nf_conntrack_max=2310720

  15. EOF

  16. ansible all -m copy -a "src=./kubernetes.conf dest=/etc/sysctl.d/"

  17. ansible all -m shell -a "sysctl -p /etc/sysctl.d/kubernetes.conf"

uploading.4e448015.gif正在上传…重新上传取消

5. 开启 ipvs

 
  1. cat > ipvs.modules <<EOF

  2. #!/bin/bash

  3. modprobe -- ip_vs

  4. modprobe -- ip_vs_rr

  5. modprobe -- ip_vs_wrr

  6. modprobe -- ip_vs_sh

  7. modprobe -- nf_conntrack

  8. EOF

  9. ansible all -m copy -a "src=./ipvs.modules dest=/etc/sysconfig/modules/"

  10. ansible all -m shell -a "chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4"

6. 设置系统时区

 
  1. ansible all -m shell -a "timedatectl set-timezone Asia/Shanghai"

  2. #将当前的 UTC 时间写入硬件时钟

  3. ansible all -m shell -a "timedatectl set-local-rtc 0"

  4. #重启依赖于系统时间的服务

  5. ansible all -m shell -a "systemctl restart rsyslog "

  6. ansible all -m shell -a "systemctl restart crond"

7.创建相关目录

ansible all -m shell -a "mkdir -p  /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert"

8.设置环境变量脚本

所有环境变量都定义在environment.sh中,需要根据环境修改。并且需要拷贝到所有节点的/opt/k8s/bin目录下

 
  1. #!/usr/bin/bash

  2. # 生成 EncryptionConfig 所需的加密 key

  3. export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64)

  4. # 集群各机器 IP 数组

  5. export NODE_IPS=( 10.120.200.2 10.120.200.3 10.120.200.10 )

  6. # 集群各 IP 对应的主机名数组

  7. export NODE_NAMES=(k8s-master02 k8s-master01 k8s-node07)

  8. # 集群MASTER机器 IP 数组

  9. export MASTER_IPS=(10.120.200.2 10.120.200.3 )

  10. # 集群所有的master Ip对应的主机

  11. export MASTER_NAMES=(k8s-master02 k8s-master01)

  12. # etcd 对应主机列表

  13. export ETCD_NAMES=(k8s-master02 k8s-master01 k8s-node07)

  14. # etcd 集群服务地址列表

  15. export ETCD_ENDPOINTS="https://10.120.200.2:2379,https://10.120.200.3:2379,https://10.120.200.10:2379"

  16. # etcd 集群间通信的 IP 和端口

  17. export ETCD_NODES="k8s-01=https://10.120.200.2:2380,k8s-02=https://10.120.200.3:2380,k8s-03=https://10.120.200.10:2380"

  18. # etcd 集群所有node ip

  19. export ETCD_IPS=(192.110.120.200.2 10.120.200.3 10.120.200.10 )

  20. # kube-apiserver 的反向代理(kube-nginx)地址端口

  21. export KUBE_APISERVER="https://10.120.200.100:8443"

  22. # 节点间互联网络接口名称

  23. export IFACE="eth0"

  24. # etcd 数据目录

  25. export ETCD_DATA_DIR="/data/k8s/etcd/data"

  26. # etcd WAL 目录,建议是 SSD 磁盘分区,或者和 ETCD_DATA_DIR 不同的磁盘分区

  27. export ETCD_WAL_DIR="/data/k8s/etcd/wal"

  28. # k8s 各组件数据目录

  29. export K8S_DIR="/data/k8s/k8s"

  30. # docker 数据目录

  31. #export DOCKER_DIR="/data/k8s/docker"

  32. ## 以下参数一般不需要修改

  33. # TLS Bootstrapping 使用的 Token,可以使用命令 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成

  34. #BOOTSTRAP_TOKEN="41f7e4ba8b7be874fcff18bf5cf41a7c"

  35. # 最好使用 当前未用的网段 来定义服务网段和 Pod 网段

  36. # 服务网段,部署前路由不可达,部署后集群内路由可达(kube-proxy 保证)

  37. SERVICE_CIDR="10.254.0.0/16"

  38. # Pod 网段,建议 /16 段地址,部署前路由不可达,部署后集群内路由可达(flanneld 保证)

  39. CLUSTER_CIDR="172.30.0.0/16"

  40. # 服务端口范围 (NodePort Range)

  41. export NODE_PORT_RANGE="1024-32767"

  42. # flanneld 网络配置前缀

  43. export FLANNEL_ETCD_PREFIX="/kubernetes/network"

  44. # kubernetes 服务 IP (一般是 SERVICE_CIDR 中第一个IP)

  45. export CLUSTER_KUBERNETES_SVC_IP="10.254.0.1"

  46. # 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)

  47. export CLUSTER_DNS_SVC_IP="10.254.0.2"

  48. # 集群 DNS 域名(末尾不带点号)

  49. export CLUSTER_DNS_DOMAIN="cluster.local"

  50. # 将二进制目录 /opt/k8s/bin 加到 PATH 中

  51. export PATH=/opt/k8s/bin:$PATH

uploading.4e448015.gif正在上传…重新上传取消

 
  1. ansible all -m copy -a "src=./environment.sh dest=/opt/k8s/bin"

  2. ansible all -m shell -a "chdir=/opt/k8s/bin chmod 755 ./environment.sh"

基本上系统前期基础部署到这里就完成了。这些内容每天master和node均需要操作。在ansible中采用了all 这个参数选项。接下来开始做master组件部署。

三. 创建证书

1. 安装cfssl工具集

 
  1. ansible k8s-master01.k8s.com -m shell -a "mkdir -p /opt/k8s/cert"

  2. wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

  3. mv cfssl_linux-amd64 cfssl

  4. ansible k8s-master01.k8s.com -m copy -a "src=./cfssl dest=/opt/k8s/bin/"

  5. wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

  6. mv cfssljson_linux-amd64 cfssljson

  7. ansible k8s-master01.k8s.com -m copy -a "src=./cfssljson dest=/opt/k8s/bin/"

  8. wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

  9. mv cfssl-certinfo_linux-amd64 cfssl-certinfo

  10. ansible k8s-master01.k8s.com -m copy -a "src=./cfssl-certinfo dest=/opt/k8s/bin/"

  11. ansible k8s-master01.k8s.com -m shell -a "chmod +x /opt/k8s/bin/*"

  12. ansible k8s-master01.k8s.com -m shell -a "export PATH=/opt/k8s/bin:$PATH"

这部分可以在master01机器上操作,但是我这环境master 没有外网,只能在ansible机器下载然后推过去了。

2.创建证书 

 
  1. cat > ca-config.json <<EOF

  2. {

  3. "signing": {

  4. "default": {

  5. "expiry": "87600h"

  6. },

  7. "profiles": {

  8. "kubernetes": {

  9. "usages": [

  10. "signing",

  11. "key encipherment",

  12. "server auth",

  13. "client auth"

  14. ],

  15. "expiry": "87600h"

  16. }

  17. }

  18. }

  19. }

  20. EOF

uploading.4e448015.gif正在上传…重新上传取消

 
  1. cat > ca-csr.json <<EOF

  2. {

  3. "CN": "kubernetes",

  4. "key": {

  5. "algo": "rsa",

  6. "size": 2048

  7. },

  8. "names": [

  9. {

  10. "C": "CN",

  11. "ST": "TJ",

  12. "L": "TJ",

  13. "O": "k8s",

  14. "OU": "4Paradigm"

  15. }

  16. ],

  17. "ca": {

  18. "expiry": "876000h"

  19. }

  20. }

  21. EOF

uploading.4e448015.gif正在上传…重新上传取消

 
  1. ansible k8s-master01.k8s.com -m copy -a "src=./ca-config.json dest=/opt/k8s/work/"

  2. ansible k8s-master01.k8s.com -m copy -a "src=./ca-csr.json dest=/opt/k8s/work/"

将生成的json文件推送到master01中。

 
  1. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/cfssl gencert -initca ca-csr.json | /opt/k8s/bin/cfssljson -bare ca"

  2. #查看生成的文件

  3. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work ls ca*"

3. 分发证书

 
  1. ansible k8s-master01.k8s.com -m shell -a "source /opt/k8s/bin/environment.sh"

  2. source /opt/k8s/bin/environment.sh

  3. ansible all -m shell -a "mkdir -p /etc/kubernetes/cert"

  4. for node_ip in ${NODE_IPS[@]}; do echo ">>> ${node_ip}"; ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work scp ca*.pem ca-config.json root@${node_ip}:/etc/kubernetes/cert"; done

4. 部署kubectl命令行工具

 
  1. ansible all -m copy -a "src=./kubectl dest=/opt/k8s/bin"

  2. ansible all -m shell -a "chdir=/opt/k8s/bin chmod +x ./* "

5. 生成admin 证书

生成admin-csr.json的文件

 
  1. {

  2. "CN": "admin",

  3. "hosts": [],

  4. "key": {

  5. "algo": "rsa",

  6. "size": 2048

  7. },

  8. "names": [

  9. {

  10. "C": "CN",

  11. "ST": "TJ",

  12. "L": "TJ",

  13. "O": "system:masters",

  14. "OU": "4Paradigm"

  15. }

  16. ]

  17. }

uploading.4e448015.gif正在上传…重新上传取消

 
  1. ansible k8s-master01.k8s.com -m copy -a "src=./admin-csr.json dest=/opt/k8s/work/"

  2. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/cfssl gencert -ca=/opt/k8s/work/ca.pem -ca-key=/opt/k8s/work/ca-key.pem -config=/opt/k8s/work/ca-config.json -profile=kubernetes admin-csr.json | /opt/k8s/bin/cfssljson -bare admin"

  3. #查看文件

  4. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work ls admin*"

  5. admin.csr

  6. admin-csr.json

  7. admin-key.pem

  8. admin.pem

6.生成kubeconfig文件

 
  1. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work source /opt/k8s/bin/environment.sh"

  2. ## 设置集群参数

  3. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/kubectl config set-cluster kubernetes \

  4. --certificate-authority=/opt/k8s/work/ca.pem \

  5. --embed-certs=true \

  6. --server=${KUBE_APISERVER} \

  7. --kubeconfig=kubectl.kubeconfig"

  8. #设置客户端认证参数

  9. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/kubectl config set-credentials admin \

  10. --client-certificate=/opt/k8s/work/admin.pem \

  11. --client-key=/opt/k8s/work/admin-key.pem \

  12. --embed-certs=true \

  13. --kubeconfig=kubectl.kubeconfig"

  14. # 设置上下文参数

  15. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/kubectl config set-context kubernetes \

  16. --cluster=kubernetes \

  17. --user=admin \

  18. --kubeconfig=kubectl.kubeconfig"

  19. # 设置默认上下文

  20. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig"

  21. #文件分发

  22. ansible all -m shell -a "mkdir -p ~/.kube "

  23. for node_ip in ${NODE_IPS[@]}; do echo ">>> ${node_ip}"; ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work scp kubectl.kubeconfig root@${node_ip}:~/.kube/config"; done

uploading.4e448015.gif正在上传…重新上传取消

四.ETCD部署

1. 分发文件

 
  1. tar -zxf etcd-v3.3.25-linux-amd64.tar.gz

  2. cd etcd-v3.3.25-linux-amd64

  3. ansible etcd -m copy -a "src=./etcd dest=/opt/k8s/bin"

  4. ansible etcd -m copy -a "src=./etcdctl dest=/opt/k8s/bin"

  5. ansible etcd -m shell -a "chdir=/opt/k8s/bin chmod +x *"

2. 创建etcd证书和私钥

生成etcd-csr.json 文件

 
  1. {

  2. "CN": "etcd",

  3. "hosts": [

  4. "127.0.0.1",

  5. "10.120.200.2",

  6. "10.120.200.3",

  7. "10.120.200.10"

  8. ],

  9. "key": {

  10. "algo": "rsa",

  11. "size": 2048

  12. },

  13. "names": [

  14. {

  15. "C": "CN",

  16. "ST": "TJ",

  17. "L": "TJ",

  18. "O": "k8s",

  19. "OU": "4Paradigm"

  20. }

  21. ]

  22. }

uploading.4e448015.gif正在上传…重新上传取消

 
  1. ansible k8s-master01.k8s.com -m copy -a "src=./etcd-csr.json dest=/opt/k8s/work"

  2. ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work /opt/k8s/bin/cfssl gencert -ca=/opt/k8s/work/ca.pem \

  3. -ca-key=/opt/k8s/work/ca-key.pem \

  4. -config=/opt/k8s/work/ca-config.json \

  5. -profile=kubernetes etcd-csr.json | /opt/k8s/bin/cfssljson -bare etcd"

  6. ansible all -m shell -a "source /opt/k8s/bin/environment.sh"

  7. for node_ip in ${ETCD_IPS[@]}; do echo ">>> ${node_ip}"; ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work scp ./etcd.pem root@${node_ip}:/etc/etcd/cert"; done

  8. for node_ip in ${ETCD_IPS[@]}; do echo ">>> ${node_ip}"; ansible k8s-master01.k8s.com -m shell -a "chdir=/opt/k8s/work scp ./etcd-key.pem root@${node_ip}:/etc/etcd/cert"; done

3. 创建启动文件

生成etcd启动模板文件etcd.service.template

 
  1. [Unit]

  2. Description=Etcd Server

  3. After=network.target

  4. After=network-online.target

  5. Wants=network-online.target

  6. Documentation=https://github.com/coreos

  7. [Service]

  8. Type=notify

  9. WorkingDirectory=/data/k8s/etcd/data

  10. ExecStart=/opt/k8s/bin/etcd \

  11. --data-dir=/data/k8s/etcd/data \

  12. --wal-dir=/data/k8s/etcd/wal \

  13. --name=##NODE_NAME## \

  14. --cert-file=/etc/etcd/cert/etcd.pem \

  15. --key-file=/etc/etcd/cert/etcd-key.pem \

  16. --trusted-ca-file=/etc/kubernetes/cert/ca.pem \

  17. --peer-cert-file=/etc/etcd/cert/etcd.pem \

  18. --peer-key-file=/etc/etcd/cert/etcd-key.pem \

  19. --peer-trusted-ca-file=/etc/kubernetes/cert/ca.pem \

  20. --peer-client-cert-auth \

  21. --client-cert-auth \

  22. --listen-peer-urls=https://##NODE_IP##:2380 \

  23. --initial-advertise-peer-urls=https://##NODE_IP##:2380 \

  24. --listen-client-urls=https://##NODE_IP##:2379 \

  25. --advertise-client-urls=https://##NODE_IP##:2379 \

  26. --initial-cluster-token=etcd-cluster-0 \

  27. --initial-cluster=k8s-master01=https://10.120.200.2:2380,k8s-master02=https://10.120.200.3:2380,k8s-node07=https://10.120.200.10:2380 \

  28. --initial-cluster-state=new \

  29. --auto-compaction-mode=periodic \

  30. --auto-compaction-retention=1 \

  31. --max-request-bytes=33554432 \

  32. --quota-backend-bytes=6442450944 \

  33. --heartbeat-interval=250 \

  34. --election-timeout=2000

  35. Restart=on-failure

  36. RestartSec=5

  37. LimitNOFILE=65536

  38. [Install]

  39. WantedBy=multi-user.target

uploading.4e448015.gif正在上传…重新上传取消

生成节点启动文件 

 
  1. cd /opt/k8s/work

  2. source /opt/k8s/bin/environment.sh

  3. for (( i=0; i < 3; i++ ))

  4. do

  5. sed -e "s/##NODE_NAME##/${MASTER_NAMES[i]}/" -e "s/##NODE_IP##/${ETCD_IPS[i]}/" etcd.service.template > etcd-${ETCD_IPS[i]}.service

  6. done

  7. ls *.service

  8. ansible k8s-master01.k8s.com -m copy -a "src=./etcd-10.120.200.2.service dest=/etc/systemd/system/etcd.service"

  9. ansible k8s-master02.k8s.com -m copy -a "src=./etcd-10.120.200.3.service dest=/etc/systemd/system/etcd.service"

  10. ansible k8s-node01.k8s.com -m copy -a "src=./etcd-10.120.200.10.service dest=/etc/systemd/system/etcd.service"

  11. ansible etcd -m shell -a "mkdir /data/k8s/etcd/data/ -p"

  12. ansible etcd -m shell -a "chmod 700 /data/k8s/etcd/data/ -R"[root@k8s-node-01 data]#

  13. ansible etcd -m shell -a "mkdir -p ${ETCD_DATA_DIR} ${ETCD_WAL_DIR}"

  14. ansible etcd -m shell -a "systemctl daemon-reload && systemctl enable etcd && systemctl restart etcd"

uploading.4e448015.gif正在上传…重新上传取消

检查结果

 
  1. ansible etcd -m shell -a "systemctl status etcd|grep Active"

  2. 结果

  3. k8s-node07.k8s.com | CHANGED | rc=0 >>

  4. Active: active (running) since 三 2020-12-23 19:55:56 CST; 2h 5min ago

  5. k8s-master01.k8s.com | CHANGED | rc=0 >>

  6. Active: active (running) since 三 20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王羲之的之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值