一、基础环境的准备:
1.1、安装docker:
docker的官网是https://www.docker.com/
1.1.1、rpm包安装:
官方下载地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
此处选择18.03作为样例
1.1.2、执行安装:
[root@k8s-master1 k8s]# yum install -y docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
1.1.3、验证docker版本:
[root@k8s-master1 ~]# docker -v
Docker version 18.03.1-ce, build 9ee9f40
1.1.4、启动docker服务:
启动docker:systemctl start docker
设置开机自启动:systemctl enable docker
查看docker的运行状态:systemctl status docker
二、ETCD集群部署:
etcd由CoreOS开发,是基于Raft算法的key-value分布式存储系统。etcd常用保存分布式系统的核心数据以保证数据一致性和高可用性。kubernetes就是使用的etcd存储所有运行数据,如集群IP划分、master和node状态、pod状态、服务发现数据等。
etcd的四个核心特点是:简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。安全:可选SSL客户认证机制。快速:每个实例每秒支持一千次写操作。可信:使用Raft算法充分实现了分布式。
三个节点,经测试,三台服务器的集群最多可以有一台宕机,如果两台宕机的话会导致整个etcd集群不可用。
2.1、各节点安装部署etcd服务:
下载地址:https://github.com/etcd-io/etcd/releases
2.1.1、节点部署:
将安装包上传到服务器的/usr/local/src目录下,并且解压二进制安装包。
2.1.2、复制可执行文件到/usr/bin/目录下:
etcd是启动server端的命令,etcdctl是客户端命令操作工具。创建kubernetes相应的目录 [root@k8s-etcd1 ~]# mkdir -p /opt/kubernetes/{cfg,bin,ssl,log}
[root@k8s-etcd1 ~]# cp etcdctl etcd /opt/kubernetes/bin/
[root@k8s-etcd1 ~]# ln -sv /opt/kubernetes/bin/* /usr/bin/
2.1.3、创建etcd服务启动脚本:
[root@k8s-etcd1 ~]# 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" #服务端etcd命令路径
Type=notify
[Install]
WantedBy=multi-user.target
2.1.4、创建etcd用户并授权目录权限:
[root@k8s-etcd1 ~]# mkdir /var/lib/etcd
[root@k8s-etcd1 ~]# useradd etcd -s /sbin/nologin
[root@k8s-etcd1 ~]# chown etcd.etcd /var/lib/etcd/
[root@k8s-etcd1 ~]# mkdir /etc/etcd
2.1.5、编辑主配置文件etcd.conf:
使用https的连接方式
[root@k8s-etcd1 ~]# cat /opt/kubernetes/cfg/etcd.conf
#[member]
ETCD_NAME="etcd-node1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_SNAPSHOT_COUNTER="10000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
ETCD_LISTEN_PEER_URLS="https://10.172.160.250:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.172.160.250:2379,https://127.0.0.1:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
#ETCD_CORS=""
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.172.160.250: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.172.160.250:2380,etcd-node2=https://10.51.50.234:2380,etcd-node3=https://10.170.185.97:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="k8s-etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="https://10.172.160.250: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"
[root@k8s-etcd1 ~]#
#备注
ETCD_DATA_DIR #当前节点的本地数据保存目录
ETCD_LISTEN_PEER_URLS #集群之间通讯端口,写自己的IP
ETCD_LISTEN_CLIENT_URLS #客户端访问地址,写自己的IP
ETCD_NAME #当前节点名称,同一个集群内的各节点不能相同
ETCD_INITIAL_ADVERTISE_PEER_URLS #通告自己的集群端口,静态发现和动态发现,自己IP
ETCD_ADVERTISE_CLIENT_URLS #通告自己的客户端端口,自己IP地址
ETCD_INITIAL_CLUSTER #”节点1名称=http://IP:端口,节点2名称=http://IP:端口,节点3名称=http://IP:端口”,写集群所有的节点信息
ETCD_INITIAL_CLUSTER_TOKEN #创建集群使用的token,一个集群内的节点保持一致
ETCD_INITIAL_CLUSTER_STATE #新建集群的时候的值为new,如果是已经存在的集群为existing。
#如果conf 里没有配置ectdata 参数,默认会在/var/lib 创建*.etcd 文件
#如果etcd集群已经创建成功, 初始状态可以修改为existing。
2.1.6、启动etcd并验证集群服务
启动etcd,设置为开机启动,并查看状态:
systemctl start etcd && systemctl enable etcd && systemctl status etcd
列出所有etcd节点:
[root@k8s-etcd1 ~]# etcdctl --endpoints=https://10.172.160.250:2379 --ca-file=/opt/kubernetes/ssl/ca.pem --cert-file=/opt/kubernetes/ssl/etcd.pem --key-file=/opt/kubernetes/ssl/etcd-key.pem member list
查看集群状态:
[root@k8s-etcd1 ~]# etcdctl --endpoints=https://10.172.160.250: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
2.1.7由于特殊原因,我的环境需要修改成HTTP模式:
修改配置文件,把设置https的地方修改成http同时删除证书的配置,删除/var/lib/etcd/下的文件,重启操作即可
查看测试是否正常跳转,停到250上的服务。停到250上的服务之后跳转到234节点,说明服务正常。