Linux运维之路


k8s1.16二进制版部署_etcd部署

admin 2019-11-01 194浏览 2条评论
首页/正文
分享到: / / / /

k8s规划

角色 IP 组件
k8smaster 10.0.0.63 kube-apiserver
kube-controller-manager
kube-scheduler
etcd
k8s-node1 10.0.0.65 kubelet
kube-proxy
docker
etcd
k8s-node2 10.0.0.66 kubelet
kube-proxy
dokcer
etcd

kubernetes 是什么

kubernetes是Goolge在2014年开源的一个容器集群管理系统,Kubernetes简称k8s. k8s用于容器化应用程序的部署,扩展和管理. k8s提供了容器编排,资源调度弹性伸缩,部署管理,服务发现等一系列功能. kubernetes目标是让部署容器化应用简单高效.

官方网站: www.kubernetes.io

Kubernetes特性

  • 自我修复 在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器 并在未准备好之前不会处理客户端请求,确保线上服务不中断
  • 弹性伸缩 使用命令,UI或者基于CPU的使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务
  • 自动部署和回滚 K8s采用滚动更新策略更新应用,一次更新一个pod,而不是同时删除所有pod,如果更新过程中出现问题,将回滚更改 确保升级部手影响的业务
  • 服务发现和负载均衡 k8s为多个容器提供一个统一访问入口(内部IP地址和一个dns名称),并且负载均衡关联的所有容器,使得 用户无需考虑容器IP冲突问题
  • 机密和配置管理 管理机密数据和应用程序配置,而不需要吧敏感数据暴露在镜像里,提高敏感数据安全性,并可以将一些常用的配置存储在K8s中,方面应用程序使用.
  • 存储编排 挂载外部存储系统,无论来自本地存储,公有云,还是网络存储,都可以作为集群资源的一部分,极大提高存储使用的灵活性.
  • 批处理 提供一次性任务,定时任务;满足批量数据处理和分析的场景.

Kubernetes的概念

Label: 标签,附加倒某个资源上,用于关联对象,查询和筛选 Namespaces: 命令空间,将逻辑上隔离 Annotations: 注释

Kubrnetes 部署

部署方式

  • minikube minikube是一个工具,可以在本地快速运行一个单点Kubernetes,仅用于尝试Kubernetes或日常开发用户使用 部署文档: https://kubernetes.io/docs/setup/minikube/
  • kubeadm Kubeadm也是一个工具,提供Kubeadm init和Kubeadm join,用于快速搭建一个Kubernetes集群
  • 二进制包(推荐) 从官方下载发行版的二进制包,手动部署每一个组件,组成Kubernetes集群. 下载地址: https://github.com/kubernetes/kubernetes/releases 截至目前最新版为: v1.16.2 本次二进制部署基于此版本进行部署

1. 基本优化

网卡精简优化:

TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.63
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=223.5.5.5

2. 网卡管理方式优化

systemctl stop NetworkManager.service 
systemctl disable NetworkManager.service 

3. 防火墙关闭

systemctl stop firewalld       #关闭防火墙  
systemctl disable firewalld    #开机不启动防火墙

4. selinux关闭

setenforce 0
getenforce

5. yum源优化

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo

6. tab补全优化

yum install -y bash-completion.noarch

7.常用软件安装

yum install -y net-tools vim lrzsz wget tree screen lsof tcpdump

8. 邮件服务关闭

ystemctl stop postfix.service
systemctl disable postfix.service

9. 关闭swap

临时关闭:
swapoff -a

永久关闭:
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p

10.host文件

[root@node2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.63 master
10.0.0.65 node1
10.0.0.66 node2

11. 时间更新

[root@master ~]# crontab -e
*/5 * * * * ntpdate ntp.aliyun.com

二进制部署k8s

master配置

etcd证书部署

1. cfssl工具自签证书 为etcd k8s生成自签证书

cfssl工具自签证书:
1. 上传工具 TLS.tar.gz 5.58mb
2. 使用该工具生成证书,解压  tar zxf TLS.tar.gz   ,进入目录 cd TLS/ 执行 ./cfssl.sh
3. sh  cfssl.sh     #执行脚本
4. 此时,/usr/local/bin/cfssl 工具已经生成.可以直接使用了.

[root@master TLS]# sh -x cfssl.sh 
+ cp -rf cfssl cfssl-certinfo cfssljson /usr/local/bin
+ chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssl-certinfo /usr/local/bin/cfssljson

[root@master TLS]# ll /usr/local/bin/
total 18808
-rwxr-xr-x 1 root root 10376657 Oct 31 14:57 cfssl
-rwxr-xr-x 1 root root  6595195 Oct 31 14:57 cfssl-certinfo
-rwxr-xr-x 1 root root  2277873 Oct 31 14:57 cfssljson

2. 为ETCD生成证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

修改证书生成的配置

[root@master etcd]# cat server-csr.json 
------------------------------------
{
    "CN": "etcd",
    "hosts": [
        "192.168.31.61",     主机
        "192.168.31.62",
        "192.168.31.63"
        ],
    "key": {
        "algo": "rsa",       加密算法
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
----------------------------------
将里面的IP 改为我们集群的IP
我们集群使用的IP:
10.0.0.63    -- master
10.0.0.65    -- node1
10.0.0.66    -- node2 
因此这里需要改为:
[root@master etcd]# vim server-csr.json 

{
    "CN": "etcd",
    "hosts": [
        "10.0.0.63",
        "10.0.0.65",
        "10.0.0.66"
        ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}


配置完成后执行:
[root@master etcd]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

正确的输出信息:
2019/11/01 11:42:35 [INFO] generate received request
2019/11/01 11:42:35 [INFO] received CSR
2019/11/01 11:42:35 [INFO] generating key: rsa-2048
2019/11/01 11:42:35 [INFO] encoded CSR
2019/11/01 11:42:35 [INFO] signed certificate with serial number 39029249026397882523722283988189821201968070475
2019/11/01 11:42:35 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").


证书生成完成后会有 几个文件:
server-key.pem ## 相当于域名证书的  .key 文件
server.pem     ## 相当于域名证书的  .crt 文件 

[root@master etcd]# ll *.pem
-rw------- 1 root root 1675 Nov  1 11:32 ca-key.pem
-rw-r--r-- 1 root root 1265 Nov  1 11:32 ca.pem
-rw------- 1 root root 1679 Nov  1 11:42 server-key.pem
-rw-r--r-- 1 root root 1338 Nov  1 11:42 server.pem

ETCD存储部署

上传 ETCD包 解压

[root@master ~]# tar tf etcd.tar.gz 
etcd/
etcd/bin/
etcd/bin/etcd      #通过systemctl 管理
etcd/bin/etcdctl
etcd/cfg/
etcd/cfg/etcd.conf
etcd/ssl/
etcd/ssl/ca.pem
etcd/ssl/server.pem
etcd/ssl/server-key.pem
etcd.service       #etcd服务


[root@master ~]# ll etcd/
total 0
drwxr-xr-x 2 root root 33 Oct  2 22:13 bin     #启动文件
drwxr-xr-x 2 root root 23 Oct  3 08:32 cfg     #配置文件
drwxr-xr-x 2 root root 60 Oct  3 08:36 ssl     #证书文件


## 证书文件都在 ssl/ 目录下
删除原有证书,将新证书放这里


因为配置都在10.0.0.63修改拷贝到各处,记得修改 ETCD_NAME= 参数 还有集群IP地址,每台都不一样

## ETCD配置文件:
[root@master etcd]# cat cfg/etcd.conf 

#[Member]
ETCD_NAME="master"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.0.63:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.63:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.63:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.63:2379"
ETCD_INITIAL_CLUSTER="master=https://10.0.0.63:2380,etcd-1=https://10.0.0.65:2380,etcd-2=https://10.0.0.66:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"




## ETCD服务启动文件:  etcd.service  

[root@master ~]# cat etcd.service 
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \                    # 这里可以看到etcd在opt目录,我们也要移动过去
        --name=${ETCD_NAME} \
        --data-dir=${ETCD_DATA_DIR} \
        --listen-peer-urls=${ETCD_LISTEN_PEER_URLS} \
        --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
        --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS} \
        --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
        --initial-cluster=${ETCD_INITIAL_CLUSTER} \
        --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN} \
        --initial-cluster-state=new \
        --cert-file=/opt/etcd/ssl/server.pem \
        --key-file=/opt/etcd/ssl/server-key.pem \
        --peer-cert-file=/opt/etcd/ssl/server.pem \      #集群内部https证书
        --peer-key-file=/opt/etcd/ssl/server-key.pem \   #集群内部https证书
        --trusted-ca-file=/opt/etcd/ssl/ca.pem \         #ca证书
        --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem      #集群内部https证书
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

## etcd配置文件修改
vim /root/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.0.63:2380"        #--- etcd集群间通信端口
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.63:2379"      #--- etcd客户端监听地址

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.63.61:2380"   #-- 本机etcd集群间通信端口
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.63:2379"            #-- 客户端监听地址
ETCD_INITIAL_CLUSTER="etcd-1=https://10.0.0.65:2380,etcd-2=https://10.0.0.66:2380,etcd-3=https://10.0.0.63:2380"                     #--- 集群主机
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"     #--- 集群口令
ETCD_INITIAL_CLUSTER_STATE="new"              #--- 集群状态,新集群为new 有集群了这里写exsiting


##修改完成后复制到/root/etcd/ssl目录中
cp  /root/TLS/etcd/{ca,server,server-key}.pem ssl/


## 修改完成后将 这几个文件拷贝到其他节点
scp -r etcd root@10.0.0.63:/opt/
scp -r etcd root@10.0.0.65:/opt/
scp -r etcd root@10.0.0.66:/opt/


## 将etcd.service拷贝到各个节点
scp  etcd.service root@10.0.0.63:/usr/lib/systemd/system
scp  etcd.service root@10.0.0.65:/usr/lib/systemd/system
scp  etcd.service root@10.0.0.66:/usr/lib/systemd/system


## 修改etcd.conf

node1 10.0.0.65
node1修改为如下:
[root@node1 ~]# cat /opt/etcd/cfg/etcd.conf
#------------------------------------------------
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.0.65:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.65:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.65:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.65:2379"
ETCD_INITIAL_CLUSTER="master=https://10.0.0.63:2380,etcd-1=https://10.0.0.65:2380,etcd-2=https://10.0.0.66:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#------------------------------------------------


#node2 10.0.0.66
node2修改为如下:
[root@node2 ~]# cat /opt/etcd/cfg/etcd.conf
#------------------------------------------------
#[Member]
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.0.66:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.66:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.66:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.66:2379"
ETCD_INITIAL_CLUSTER="master=https://10.0.0.63:2380,etcd-1=https://10.0.0.65:2380,etcd-2=https://10.0.0.66:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#------------------------------------------------

##注意,集群 ETCD_NAME= 不可重复, 如果都是ETCD_NAME="etcd-2" 将导致另一台启动失败


#master 10.0.0.63
master修改为如下:
[root@master ~]# cat /opt/etcd/cfg/etcd.conf
#------------------------------------------------
#[Member]
ETCD_NAME="master"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://10.0.0.63:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.0.0.63:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.0.0.63:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.0.0.63:2379"
ETCD_INITIAL_CLUSTER="master=https://10.0.0.63:2380,etcd-1=https://10.0.0.65:2380,etcd-2=https://10.0.0.66:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
#------------------------------------------------

3台已经修改完毕.

确认证书配置

[root@master ~]# vim TLS/etcd/server-csr.json 

{
    "CN": "etcd",
    "hosts": [
        "10.0.0.63",
        "10.0.0.65",
        "10.0.0.66"
        ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}

#证书必须包含集群中所有IP

启动服务3台

#3台均要启动
[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl enable etcd.service
[root@master ~]# systemctl start etcd.service

#最后检查状态,但是注意,etcd单独启动master会一直等待,他要等到 node1 node2启动后 master上的etcd才会完全启动.这点需要注意.
[root@master ~]# systemctl status etcd.service

# 注意配置文件错误会导致无法启动,集群机器一台启动后会等待其他节点启动,只有同时启动才会成功启动

命令查看3台节点状态:

[root@master ~]# /opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://10.0.0.63:2379,https://10.0.0.65:2379,https://10.0.0.66:2379" cluster-health
member 66858311e4a1963d is healthy: got healthy result from https://10.0.0.66:2379
member e4870964fbcd920d is healthy: got healthy result from https://10.0.0.63:2379
member ea6dd8d87a0c259a is healthy: got healthy result from https://10.0.0.65:2379
cluster is healthy

检查:

master节点启动状态:

node1节点启动状态

node2节点启动状态:

相关附件:

TLS.tar.gz etcd.tar.gz

最后修改:2019-11-01 13:40:27 © 著作权归作者所有
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

上一篇

发表评论

评论列表

匿名用户 2019-11-06 16:37:23

👍 

回复
admin 2019-11-03 19:53:56
666
回复