环境说明

三台主机:

k8s-master    10.0.3.225

k8s-node1     10.0.3.226

k8s-node2     10.0.3.227

配置主机名解析

[root@k8s-master kubernetes]# vim /etc/hosts
10.0.3.225 k8s-master
10.0.3.226 k8s-node1
10.0.3.227 k8s-node2

关闭防火墙和SElinux

[root@k8s-master kubernetes]# systemctl stop firewalld

[root@k8s-master kubernetes]# getenforce
Disabled

设置环境变量

vim  /root/.bash_profile

PATH=$PATH:$HOME/bin:/opt/kubernetes/bin

source /root/.bash_profile

为了拷贝方便,设置SSH免密

[root@k8s-master src]# ssh-keygen
[root@k8s-master src]# ssh-copy-id 10.0.3.225
[root@k8s-master src]# ssh-copy-id 10.0.3.226
[root@k8s-master src]# ssh-copy-id 10.0.3.227

系统环境初始化

1.安装Docker(三台操作)

第一步:使用国内Docker源

[root@linux-node1 ~]# cd /etc/yum.repos.d/
[root@linux-node1 yum.repos.d]# wget \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第二步:Docker安装:

[root@linux-node1 ~]# yum install -y docker-ce

第三步:启动后台进程:

[root@linux-node1 ~]# systemctl start docker

2.准备部署目录(三台操作)

    mkdir -p /opt/kubernetes/{cfg,bin,ssl,log}

3.准备软件包百度网盘下载地址:(在mastrt操作)

[https://pan.baidu.com/s/1zs8sCouDeCQJ9lghH1BPiw](https://pan.baidu.com/s/1zs8sCouDeCQJ9lghH1BPiw)
cd  /usr/local/
unzip k8s-v1.10.1-manual.zip
cd k8s-v1.10.1-manual/k8s-v1.10.1/
mv * /usr/local/src/
 k8s官网地址:https://github.com/kubernetes

4.解压软件包(在mastrt操作)

cd /usr/local/src/
tar zxvf kubernetes.tar.gz && \
tar zxvf kubernetes-server-linux-amd64.tar.gz && \
tar zxvf kubernetes-client-linux-amd64.tar.gz && \
tar zxvf kubernetes-node-linux-amd64.tar.gz

所有软件包都在kubernetes目录下了

[root@k8s-master src]# ls
cfssl-certinfo_linux-amd64 cfssl_linux-amd64 etcd-v3.2.18-linux-amd64.tar.gz kubernetes kubernetes-node-linux-amd64.tar.gz kubernetes.tar.gz
cfssljson_linux-amd64 cni-plugins-amd64-v0.7.1.tgz flannel-v0.10.0-linux-amd64.tar.gz kubernetes-client-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz
[root@k8s-master src]# cd kubernetes/
[root@k8s-master kubernetes]# ls
addons client cluster docs examples hack kubernetes-src.tar.gz LICENSES node README.md server third_party version
[root@k8s-master kubernetes]#

手动制作CA证书

1.安装 CFSSL

上面的安装包,已经下载好cfssl了。移动/opt/kubernetes/bin/即可。

cd /usr/local/src
chmod +x cfssl* && \
mv cfssl-certinfo_linux-amd64 /opt/kubernetes/bin/cfssl-certinfo && \
mv cfssljson_linux-amd64 /opt/kubernetes/bin/cfssljson && \
mv cfssl_linux-amd64 /opt/kubernetes/bin/cfssl

复制cfssl命令文件到k8s-node1和k8s-node2节点。如果实际中多个节点,就都需要同步复制。

[root@k8s-master src]# scp /opt/kubernetes/bin/cfssl* 10.0.3.226:/opt/kubernetes/bin/
[root@k8s-master src]# scp /opt/kubernetes/bin/cfssl* 10.0.3.227:/opt/kubernetes/bin/

CFSSL下载地址:

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

2.初始化cfssl

[root@k8s-master src]# cd /usr/local/src/
[root@k8s-master src]# mkdir ssl && cd ssl
[root@k8s-master ssl]# cfssl print-defaults config > config.json
[root@k8s-master ssl]# cfssl print-defaults csr > csr.json

3.创建用来生成 CA 文件的 JSON 配置文件

[root@k8s-master ssl]# vim ca-config.json
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}

4.创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件

[root@k8s-master ssl]#  vim ca-csr.json
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size":
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}

5.生成CA证书(ca.pem)和密钥(ca-key.pem)

[root@k8s-master ssl]#  cfssl gencert -initca ca-csr.json | cfssljson -bare ca
// :: [INFO] generating a new CA key and certificate from CSR
// :: [INFO] generate received request
// :: [INFO] received CSR
// :: [INFO] generating key: rsa-
// :: [INFO] encoded CSR
// :: [INFO] signed certificate with serial number [root@k8s-master ssl]# ls -l ca*
-rw-r--r-- root root Nov : ca-config.json
-rw-r--r-- root root Nov : ca.csr
-rw-r--r-- root root Nov : ca-csr.json
-rw------- root root Nov : ca-key.pem
-rw-r--r-- root root Nov : ca.pem

6.分发证书

[root@k8s-master ssl]# cp ca.csr ca.pem ca-key.pem ca-config.json /opt/kubernetes/ssl

#scp证书到k8s-node1和k8s-node2节点
[root@k8s-master ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 10.0.3.226:/opt/kubernetes/ssl
ca.csr % .0KB/s :
ca.pem % .3KB/s :
ca-key.pem % .6KB/s :
ca-config.json % .3KB/s :
[root@k8s-master ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 10.0.3.227:/opt/kubernetes/ssl
ca.csr % .0KB/s :
ca.pem % .3KB/s :
ca-key.pem % .6KB/s :
ca-config.json % .3KB/s :

部署ETCD集群

详细介绍查看etcd官网:  https://github.com/coreos/etcd-operator

0.准备etcd软件包

[root@k8s-master src]# pwd
/usr/local/src
[root@k8s-master src]# tar zxvf etcd-v3.2.18-linux-amd64.tar.gz
[root@k8s-master src]# cd etcd-v3.2.18-linux-amd64/
[root@k8s-master etcd-v3.2.18-linux-amd64]# ls
Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
[root@k8s-master etcd-v3.2.18-linux-amd64]# cp etcd etcdctl /opt/kubernetes/bin/
[root@k8s-master etcd-v3.2.18-linux-amd64]# cp etcd etcdctl 10.0.3.226:/opt/kubernetes/bin/
[root@k8s-master etcd-v3.2.18-linux-amd64]# scp etcd etcdctl 10.0.3.227:/opt/kubernetes/bin/

下载地址:wget https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz

1.创建 etcd 证书签名请求:

[root@k8s-master ssl]# cd /usr/local/src/ssl/
[root@k8s-master ssl]# vim etcd-csr.json
{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"10.0.3.225", #指定etcd节点的IP地址
"10.0.3.226",
"10.0.3.227"
],
"key": {
"algo": "rsa",
"size":
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}

2.生成 etcd 证书和私钥:

[root@k8s-master ssl]# cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
> -ca-key=/opt/kubernetes/ssl/ca-key.pem \
> -config=/opt/kubernetes/ssl/ca-config.json \
> -profile=kubernetes etcd-csr.json | cfssljson -bare etcd 会生成一下证书文件
[root@k8s-master ssl]# ls -l etcd*
-rw-r--r-- root root Nov : etcd.csr
-rw-r--r-- root root Nov : etcd-csr.json
-rw------- root root Nov : etcd-key.pem
-rw-r--r-- root root Nov : etcd.pem

3.将证书移动到/opt/kubernetes/ssl目录下

[root@k8s-master ssl]# cp etcd*.pem /opt/kubernetes/ssl
[root@k8s-master ssl]# scp etcd*.pem 10.0.3.226:/opt/kubernetes/ssl
etcd-key.pem % .6KB/s :
etcd.pem % .4KB/s :
[root@k8s-master ssl]# scp etcd*.pem 10.0.3.227:/opt/kubernetes/ssl
etcd-key.pem % .6KB/s :
etcd.pem

4.设置ETCD配置文件

[root@k8s-master ssl]# vim /opt/kubernetes/cfg/etcd.conf
#[member]
ETCD_NAME="etcd-node1" #唯一的,每个节点不能一样
ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #数据存放目录
#ETCD_SNAPSHOT_COUNTER=""
#ETCD_HEARTBEAT_INTERVAL=""
#ETCD_ELECTION_TIMEOUT=""
ETCD_LISTEN_PEER_URLS="https://10.0.3.225:2380" #集群之间通信使用
ETCD_LISTEN_CLIENT_URLS="https://10.0.3.225:2379,https://127.0.0.1:2379" #是给客户端使用
#ETCD_MAX_SNAPSHOTS=""
#ETCD_MAX_WALS=""
#ETCD_CORS=""
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.3.225:2380"
# if you use different ETCD_NAME (e.g. test),
# set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="etcd-node1=https://10.0.3.225:2380,etcd-node2=https://10.0.3.226:2380,etcd-node3=https://10.0.3.227:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.3.225:2379"
#[security]
CLIENT_CERT_AUTH="true"
ETCD_CA_FILE="/opt/kubernetes/ssl/ca.pem"
ETCD_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"
PEER_CLIENT_CERT_AUTH="true"
ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"
ETCD_PEER_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"

5.创建ETCD系统服务

[root@k8s-master ssl]# vim /etc/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target [Service]
Type=simple
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/opt/kubernetes/cfg/etcd.conf
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /opt/kubernetes/bin/etcd"
Type=notify [Install]
WantedBy=multi-user.target

6.重新加载系统服务

[root@k8s-master ssl]# systemctl daemon-reload
[root@k8s-master ssl]# systemctl enable etcd.service

etcd.conf和etcd.service拷贝到其他节点
[root@k8s-master ssl]# scp /opt/kubernetes/cfg/etcd.conf 10.0.3.226:/opt/kubernetes/cfg/
etcd.conf % .1KB/s :
[root@k8s-master ssl]# scp /opt/kubernetes/cfg/etcd.conf 10.0.3.227:/opt/kubernetes/cfg/
etcd.conf % .1KB/s :
[root@k8s-master ssl]# scp /etc/systemd/system/etcd.service 10.0.3.226:/opt/kubernetes/cfg/
etcd.service % .3KB/s :
[root@k8s-master ssl]# scp /etc/systemd/system/etcd.service 10.0.3.227:/opt/kubernetes/cfg/
etcd.service

其他节点需要修改一下配置。以node1为例,node2一样要修改。
[root@k8s-node1 yum.repos.d]# vim /opt/kubernetes/cfg/etcd.conf
ETCD_NAME="etcd-node2"
ETCD_LISTEN_PEER_URLS="https://10.0.3.226:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.3.226:2379,https://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.3.226:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.3.226:2379"

同样需要reload一下。
systemctl daemon-reload
systemctl enable etcd


在所有节点上创建etcd存储目录并启动etcd
mkdir /var/lib/etcd
systemctl start etcd
systemctl status etcd
netstat -lntup|grep 23
需要在所有的 etcd 节点重复上面的步骤,直到所有机器的 etcd 服务都已启动。

7.验证集群

[root@k8s-node1 ~]#  etcdctl --endpoints=https://10.0.3.225:2379 \
> --ca-file=/opt/kubernetes/ssl/ca.pem \
> --cert-file=/opt/kubernetes/ssl/etcd.pem \
> --key-file=/opt/kubernetes/ssl/etcd-key.pem cluster-health
member 981424cb437f053 is healthy: got healthy result from https://10.0.3.226:2379
member 7a30be4a7549b699 is healthy: got healthy result from https://10.0.3.227:2379
member d12a89096ab8db09 is healthy: got healthy result from https://10.0.3.225:2379
cluster is healthy

K8s集群部署(一)------ETCD集群部署的更多相关文章

  1. Kubernetes集群部署之三ETCD集群部署

    kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes 集群机器k8s-master.k8s-node-1.k ...

  2. 使用k8s operator安装和维护etcd集群

    关于Kubernetes Operator这个新生事物,可以参考下文来了解这一技术的来龙去脉: https://yq.aliyun.com/articles/685522?utm_content=g_ ...

  3. k8s集群之上运行etcd集群

    一.知识点: 1.headless services NOTE:: 我们在k8s上运行etcd集群,集群间通告身份是使用dns,不能使用pod ip,因为如果pod被重构了ip会变,在这种场景中不能直 ...

  4. k8s集群中遇到etcd集群故障的排查思路

    一次在k8s集群中创建实例发现etcd集群状态出现连接失败状况,导致创建实例失败.于是排查了一下原因. 问题来源 下面是etcd集群健康状态: 1 2 3 4 5 6 7 8 9 10 11 [roo ...

  5. Kubernetes集群搭建之Etcd集群配置篇

    介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...

  6. k8s基础(3)etcd集群

    下载安装 https://github.com/coreos/etcd/releases 在这网页,可以看到有多个版本共选择. 下载3.25 解压后, cd etcd-v3.2.5-linux-amd ...

  7. K8s二进制部署单节点 etcd集群,flannel网络配置 ——锥刺股

    K8s 二进制部署单节点 master    --锥刺股 k8s集群搭建: etcd集群 flannel网络插件 搭建master组件 搭建node组件 1.部署etcd集群 2.Flannel 网络 ...

  8. etcd集群部署与遇到的坑(转)

    原文 https://www.cnblogs.com/breg/p/5728237.html etcd集群部署与遇到的坑 在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一 ...

  9. Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    目录 一.系统环境 二.前言 三.etcd数据库 3.1 概述 四.安装部署etcd单节点 4.1 环境介绍 4.2 配置节点的基本环境 4.3 安装部署etcd单节点 4.4 使用客户端访问etcd ...

  10. etcd集群部署与遇到的坑

    在k8s集群中使用了etcd作为数据中心,在实际操作中遇到了一些坑.今天记录一下,为了以后更好操作. ETCD参数说明 —data-dir 指定节点的数据存储目录,这些数据包括节点ID,集群ID,集群 ...

随机推荐

  1. C# WPF 调用FFMPEG实现“SORRY 为所欲为/王境泽”表情包GIF生成软件

    C# WPF 调用FFMPEG实现“SORRY 为所欲为/王境泽”表情包GIF生成 1,调用ffmpeg将外挂字幕“嵌入”视频中,保存副本: 2,调用ffmpeg将副本视频导出为gif图片. 参考资料 ...

  2. 的二分图poj2446

    称号:id=2446">poj2446 意甲冠军:给定一个m*n矩阵,在有些地方坑,然后1*2本文叠加,反复.可以把出了坑的地方其它所有覆盖的话输出YES,否则NO 分析:有一道二分图 ...

  3. WPF 判断值是不是NaN

    原文:WPF 判断值是不是NaN 经常要在StoryBoard用到的 判断方法: Double.IsNaN(你要判断的值)= true// NaN 否则就不是.

  4. 解压压缩文件报错gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now

    压缩包是直接weget 后面加官网上的tar包地址获取的  [root@xuegod43 ~]# tar -zxvf /home/hadoop/hadoop-2.6.5-src.tar.gz gzip ...

  5. [WPF]获取控件间的相对位置

    原文:[WPF]获取控件间的相对位置 [WPF]获取控件间的相对位置                             周银辉 我们知道WPF有着比较灵活的布局方式,关于某个控件的坐标,Canv ...

  6. Struts2之Struts2

    Struts2-2.5.5版本是目前为止最新的版本了,相对于之前的2.3版本以及再之前的版本而言,新版本改动了很多. 好了,废话不多说,GO CODE! 基本jar包: web.xml核心配置,这里要 ...

  7. Win8Metro(C#)数字图像处理--2.15图像霓虹效果

    原文:Win8Metro(C#)数字图像处理--2.15图像霓虹效果  [函数名称] 图像霓虹效果函数NeonProcess(WriteableBitmap src) 上述公式进行开方即可. [函 ...

  8. 分布式文件系统的比较,115网盘用了fastdfs

    分布式文件系统 分布式文件系统,作为网盘的基础,应用底层文件管理.而分布式文件系统之上,用户文件的权限,用户目录管理都是由非分布式文件系统管理. 分布式文件系统需要关心的主要内容: 文件分布/数据分布 ...

  9. 想让一个Widget成为模态,我们只需要对其设置setAttribute(Qt::WA_ShowModal, true);

    想让一个Widget成为模态,我们只需要对其设置: setAttribute(Qt::WA_ShowModal, true); 注意:这是QWidget的成员函数 ,也就是说,QWidget可以显示为 ...

  10. 奇虎360选择IPO “壳概念”很受伤

    黄一帆   “市场正呈现出为一幕经典影像:在绚丽的霞光笼罩下,蔚蓝色的大海边,在金色的海岸上,欢笑的孩子们踮起脚尖,刚好看见原来海平面露出的航船桅杆——那是缓缓驶来的注册制号:而转过头来,则是沙滩上大 ...