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节点启动状态:
相关附件:

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

发表评论