1、Kubernetes架构和集群规划
(1)Kubernetes架构
(2)K8S架构图
K8S Master
节点
API Server:K8S对外的唯一接口,所有的请求都需要经过这个接口进行通信。主要处理REST操作以及更新ETCD中的对象。是所有资源增删改查的唯一入口。
Scheduler:资源调度,负责Pod到Node的调度
Controller Manager:所有其他集群级别的功能,目前由控制器Manager执行。资源对象的自动化控制中心
ETCD:所有持久化的状态信息存储在ETCD中。
K8S Node
节点
Kubelet:管理Pods以及容器、镜像、Volume等,实现对集群、对节点的管理。 Kube-proxy:提供网络代理以及负载均衡,实现Service通信。有2种方式:LVS或者Iptables Docker Engine:负责节点的容器的管理工作
(3)实验环境准备:
主机名 IP地址 描述 linux-node1.example.com eth0:192.168.56.110 K8S Master节点/ETCD节点 linux-node2.example.com eth0:192.168.56.120 K8S Node节点/ETCD节点 linux-node3.example.com eth0:192.168.56.130 K8S Node节点/ETCD节点
(4)系统环境初始化
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.准备软件包
百度网盘下载地址:
https://pan.baidu.com/s/1zs8sCouDeCQJ9lghH1BPiw
4.解压软件包
[root@linux-node1 src]# tar zxf kubernetes.tar.gz [root@linux-node1 src]# tar zxf kubernetes-server-linux-amd64.tar.gz [root@linux-node1 src]# tar zxf kubernetes-client-linux-amd64.tar.gz [root@linux-node1 src]# tar zxf kubernetes-node-linux-amd64.tar.gz
[root@linux-node1 src]# cd kubernetes #解压的server、client、node都会解压到kubernetes目录下 [root@linux-node1 kubernetes]# ll total 29536 drwxr-xr-x 2 root root 6 Apr 12 23:16 addons drwxr-xr-x 3 root root 31 Apr 12 23:16 client drwxr-xr-x 13 root root 4096 Apr 12 23:24 cluster drwxr-xr-x 7 root root 131 Apr 12 23:25 docs drwxr-xr-x 34 root root 4096 Apr 12 23:25 examples drwxr-xr-x 3 root root 17 Apr 12 23:24 hack -rw-r--r-- 1 root root 24710771 Apr 12 23:16 kubernetes-src.tar.gz -rw-r--r-- 1 root root 5516760 Apr 12 23:16 LICENSES drwxr-xr-x 3 root root 17 Apr 12 23:16 node -rw-r--r-- 1 root root 3329 Apr 12 23:25 README.md drwxr-xr-x 3 root root 66 Apr 12 23:16 server drwxr-xr-x 3 root root 22 Apr 12 23:24 third_party -rw-r--r-- 1 root root 8 Apr 12 23:25 version
各个节点增加kubernetes的环境变量
[root@linux-node1 ~]# vim .bash_profile PATH=$PATH:$HOME/bin:/opt/kubernetes/bin [root@linux-node1 ~]# source .bash_profile
[root@linux-node2 ~]# vim .bash_profile PATH=$PATH:$HOME/bin:/opt/kubernetes/bin [root@linux-node2 ~]# source .bash_profile
[root@linux-node3 ~]# vim .bash_profile PATH=$PATH:$HOME/bin:/opt/kubernetes/bin [root@linux-node3 ~]# source .bash_profile
2、CA证书创建和分发
从k8s的1.8版本开始,K8S系统各组件需要使用TLS证书对通信进行加密。没一个K8S集群都需要独立的CA证书体系。CA证书有以下三种:easyrsa、openssl、cfssl。这里使用cfssl证书,也是目前使用最多的,相对来说配置简单一些,通过json的格式,把证书相关的东西配置进去即可。这里使用cfssl的版本为1.2版本。
(1)安装 CFSSL
[root@linux-node1 ~]# cd /usr/local/src [root@linux-node1 src]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 [root@linux-node1 src]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 [root@linux-node1 src]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 [root@linux-node1 src]# chmod +x cfssl* [root@linux-node1 src]# mv cfssl-certinfo_linux-amd64 /opt/kubernetes/bin/cfssl-certinfo [root@linux-node1 src]# mv cfssljson_linux-amd64 /opt/kubernetes/bin/cfssljson [root@linux-node1 src]# mv cfssl_linux-amd64 /opt/kubernetes/bin/cfssl 复制cfssl命令文件到k8s-node1和k8s-node2节点。如果实际中多个节点,就都需要同步复制。 [root@linux-node1 ~]# ssh-copy-id linux-node1 [root@linux-node1 ~]# ssh-copy-id linux-node2 [root@linux-node1 ~]# ssh-copy-id linux-node3 [root@linux-node1 ~]# scp /opt/kubernetes/bin/cfssl* 192.168.56.120:/opt/kubernetes/bin cfssl 100% 10MB 18.1MB/s 00:00 cfssl-certinfo 100% 6441KB 21.3MB/s 00:00 cfssljson 100% 2224KB 13.3MB/s 00:00 [root@linux-node1 ~]# scp /opt/kubernetes/bin/cfssl* 192.168.56.130:/opt/kubernetes/bin cfssl 100% 10MB 22.5MB/s 00:00 cfssl-certinfo 100% 6441KB 40.7MB/s 00:00 cfssljson 100% 2224KB 43.1MB/s 00:00
(2)创建用来生成 CA 文件的 JSON 配置文件
[root@linux-node1 ssl]# vim ca-config.json { "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } }
(3)创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件
[root@linux-node1 ssl]# vim ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "BeiJing", "L": "BeiJing", "O": "k8s", "OU": "System" } ] }
(4)生成CA证书(ca.pem)和密钥(ca-key.pem)
[root@linux-node1 ssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca 2018/05/30 14:11:02 [INFO] generating a new CA key and certificate from CSR 2018/05/30 14:11:02 [INFO] generate received request 2018/05/30 14:11:02 [INFO] received CSR 2018/05/30 14:11:02 [INFO] generating key: rsa-2048 2018/05/30 14:11:02 [INFO] encoded CSR 2018/05/30 14:11:02 [INFO] signed certificate with serial number 167714418220584190953978332616641264281080483250 [root@linux-node1 ssl]# ll total 20 -rw-r--r-- 1 root root 290 May 30 14:09 ca-config.json -rw-r--r-- 1 root root 1001 May 30 14:11 ca.csr -rw-r--r-- 1 root root 208 May 30 14:10 ca-csr.json -rw------- 1 root root 1675 May 30 14:11 ca-key.pem -rw-r--r-- 1 root root 1359 May 30 14:11 ca.pem
(5)分发证书
[root@linux-node1 ssl]# cp ca.csr ca.pem ca-key.pem ca-config.json /opt/kubernetes/ssl SCP证书到k8s-node1和k8s-node2节点 [root@linux-node1 ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.56.120:/opt/kubernetes/ssl ca.csr 100% 1001 350.2KB/s 00:00 ca.pem 100% 1359 891.4KB/s 00:00 ca-key.pem 100% 1675 1.0MB/s 00:00 ca-config.json 100% 290 180.7KB/s 00:00 [root@linux-node1 ssl]# scp ca.csr ca.pem ca-key.pem ca-config.json 192.168.56.130:/opt/kubernetes/ssl ca.csr 100% 1001 350.2KB/s 00:00 ca.pem 100% 1359 891.4KB/s 00:00 ca-key.pem 100% 1675 1.0MB/s 00:00 ca-config.json 100% 290 180.7KB/s 00:00