Skip to content

Commit

Permalink
update to v1.14.3
Browse files Browse the repository at this point in the history
  • Loading branch information
Zhang Jun committed May 27, 2019
1 parent d4bdd9e commit e899135
Show file tree
Hide file tree
Showing 61 changed files with 1,707 additions and 1,475 deletions.
24 changes: 8 additions & 16 deletions 00.组件版本和配置策略.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
<!-- toc -->

tags: version

# 00.组件版本和配置策略

<!-- TOC -->

- [00.组件版本和配置策略](#00组件版本和配置策略)
- [组件版本](#组件版本)
- [主要配置策略](#主要配置策略)
- [组件版本](#组件版本)
- [主要配置策略](#主要配置策略)

<!-- /TOC -->

## 组件版本

+ Kubernetes 1.12.3
+ Docker 18.09.0-ce
+ Etcd 3.3.10
+ Flanneld 0.10.0
+ Kubernetes 1.14.2
+ Docker 18.09.6-ce
+ Etcd 3.3.13
+ Flanneld 0.11.0
+ 插件:
- Coredns
- Dashboard
- Heapster (influxdb、grafana)
- Metrics-Server
- Metrics-server
- EFK (elasticsearch、fluentd、kibana)
+ 镜像仓库:
- docker registry
Expand Down Expand Up @@ -70,6 +62,6 @@ kube-proxy:

+ DNS:使用功能、性能更好的 coredns;
+ Dashboard:支持登录认证;
+ Metric:heapster、metrics-server,使用 https 访问 kubelet 安全端口;
+ Metric:metrics-server,使用 https 访问 kubelet 安全端口;
+ Log:Elasticsearch、Fluend、Kibana;
+ Registry 镜像库:docker-registry、harbor;
89 changes: 30 additions & 59 deletions 01.系统初始化和全局变量.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ tags: environment
- [主机名](#主机名)
- [添加 docker 账户](#添加-docker-账户)
- [无密码 ssh 登录其它节点](#无密码-ssh-登录其它节点)
- [将可执行文件路径 /opt/k8s/bin 添加到 PATH 变量中](#将可执行文件路径-optk8sbin-添加到-path-变量中)
- [更新 PATH 变量](#更新-path-变量)
- [安装依赖包](#安装依赖包)
- [关闭防火墙](#关闭防火墙)
- [关闭 swap 分区](#关闭-swap-分区)
Expand All @@ -18,54 +18,44 @@ tags: environment
- [加载内核模块](#加载内核模块)
- [优化内核参数](#优化内核参数)
- [设置系统时区](#设置系统时区)
- [更新系统时间](#更新系统时间)
- [关闭无关的服务](#关闭无关的服务)
- [设置 rsyslogd 和 systemd journald](#设置-rsyslogd-和-systemd-journald)
- [创建相关目录](#创建相关目录)
- [升级内核](#升级内核)
- [关闭 NUMA](#关闭-numa)
- [检查系统内核和模块是否适合运行 docker (仅适用于 linux 系统)](#检查系统内核和模块是否适合运行-docker-仅适用于-linux-系统)
- [分发集群环境变量定义脚本(扩容时不需要执行该步骤)](#分发集群环境变量定义脚本扩容时不需要执行该步骤)
- [分发集群配置参数脚本](#分发集群配置参数脚本)
- [参考](#参考)

<!-- /TOC -->

## 集群机器

+ m7-autocv-gpu01:172.27.128.150
+ m7-autocv-gpu02:172.27.128.149
+ m7-autocv-gpu03:172.27.128.148

可以使用 vagrant 和 Vagrantfile 创建三台虚机:

``` bash
cd vagrant
vagrant up
```

本文档中的 etcd 集群、master 节点、worker 节点均使用这三台机器。
+ zhangjun-k8s01:172.27.137.240
+ zhangjun-k8s02:172.27.137.239
+ zhangjun-k8s03:172.27.137.238

注意:

1. 本文档中的 etcd 集群、master 节点、worker 节点均使用这三台机器;
1. 需要在**所有机器**上执行本文档的初始化命令;
1. 需要使用**具有 root 权限的账号**执行这些命令。
2. 需要使用 **root 账号**执行这些命令;
3. 如果没有特殊指明,本文档的所有操作**均在 zhangjun-k8s01 节点上执行**,然后远程分发文件和执行命令;

## 主机名

设置永久主机名称,然后重新登录:

``` bash
hostnamectl set-hostname m7-autocv-gpu01 #m7-autocv-gpu01 替换为当前主机名
hostnamectl set-hostname zhangjun-k8s01 #zhangjun-k8s01 替换为当前主机名
```
+ 设置的主机名保存在 `/etc/hostname` 文件中;

如果 DNS 不支持解析主机名称,则需要修改每台机器的 `/etc/hosts` 文件,添加主机名和 IP 的对应关系:

``` bash
cat >> /etc/hosts <<EOF
172.27.128.150 m7-autocv-gpu01 m7-autocv-gpu01
172.27.128.149 m7-autocv-gpu02 m7-autocv-gpu02
172.27.128.148 m7-autocv-gpu03 m7-autocv-gpu03
172.27.137.240 zhangjun-k8s01
172.27.137.239 zhangjun-k8s02
172.27.137.238 zhangjun-k8s03
EOF
```

Expand All @@ -79,23 +69,24 @@ useradd -m docker

## 无密码 ssh 登录其它节点

如果没有特殊指明,本文档的所有操作**均在 m7-autocv-gpu01 节点上执行**,然后远程分发文件和执行命令,所以需要添加该节点到其它节点的 ssh 信任关系。
如果没有特殊指明,本文档的所有操作**均在 zhangjun-k8s01 节点上执行**,然后远程分发文件和执行命令,所以需要添加该节点到其它节点的 ssh 信任关系。

设置 m7-autocv-gpu01 可以无密码登录**所有节点**的 root 账户
设置 zhangjun-k8s01 的 root 账户可以无密码登录**所有节点**

``` bash
ssh-keygen -t rsa
ssh-copy-id root@m7-autocv-gpu01
ssh-copy-id root@m7-autocv-gpu02
ssh-copy-id root@m7-autocv-gpu03
ssh-copy-id root@zhangjun-k8s01
ssh-copy-id root@zhangjun-k8s02
ssh-copy-id root@zhangjun-k8s03
```

## 将可执行文件路径 /opt/k8s/bin 添加到 PATH 变量中
## 更新 PATH 变量

在每台机器上添加环境变量
将可执行文件目录添加到 PATH 环境变量中

``` bash
echo 'PATH=/opt/k8s/bin:$PATH' >>/root/.bashrc
source /root/.bashrc
```

## 安装依赖包
Expand All @@ -106,18 +97,17 @@ CentOS:

``` bash
yum install -y epel-release
yum install -y conntrack ntpdate ipvsadm ipset jq iptables curl sysstat libseccomp wget
/usr/sbin/modprobe ip_vs
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
```

Ubuntu:

``` bash
apt-get install -y conntrack ipvsadm ipset jq iptables curl sysstat libseccomp
/usr/sbin/modprobe ip_vs
apt-get install -y conntrack ipvsadm ntp ipset jq iptables curl sysstat libseccomp
```

+ ipvs 依赖 ipset;
+ ntp 保证各机器系统时间同步;

## 关闭防火墙

Expand Down Expand Up @@ -160,6 +150,7 @@ systemctl disable dnsmasq
## 加载内核模块

``` bash
modprobe ip_vs_rr
modprobe br_netfilter
```

Expand Down Expand Up @@ -201,17 +192,6 @@ systemctl restart rsyslog
systemctl restart crond
```

## 更新系统时间

``` bash
ntpdate cn.pool.ntp.org
cat > /etc/cron.hourly/99-ntp <<<EOF
#!/bin/sh
/usr/sbin/ntpdate cn.pool.ntp.org
EOF
chmod a+x /etc/cron.hourly/99-ntp
```

## 关闭无关的服务

``` bash
Expand All @@ -224,7 +204,7 @@ systemd 的 journald 是 Centos 7 缺省的日志记录工具,它记录了所

相比 systemd,journald 记录的日志有如下优势:

1. 可以记录到内存或文件系统;(默认记录到内存,对应的位置为 /run/log/jounal)
1. 可以记录到内存或文件系统;(默认记录到内存,对应的位置为 /run/log/jounal)
1. 可以限制占用的磁盘空间、保证磁盘剩余空间;
1. 可以限制日志文件大小、保存的时间;

Expand Down Expand Up @@ -265,7 +245,7 @@ systemctl restart systemd-journald
创建目录:

``` bash
mkdir -p /opt/k8s/{bin,work} /etc/kubernetes/cert /etc/etcd/cert
mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert
```

## 升级内核
Expand Down Expand Up @@ -303,25 +283,16 @@ cp /boot/grub2/grub.cfg{,.bak}
grub2-mkconfig -o /boot/grub2/grub.cfg
```

## 检查系统内核和模块是否适合运行 docker (仅适用于 linux 系统)

``` bash
curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
bash ./check-config.sh
```

## 分发集群环境变量定义脚本(扩容时不需要执行该步骤)

后续的部署步骤将使用 [environment.sh](manifests/environment.sh) 文件中定义的全局环境变量,请根据**自己的机器、网络情况**修改:
## 分发集群配置参数脚本

然后,把全局变量定义脚本拷贝到**所有**节点的 `/opt/k8s/bin` 目录:
后续使用的环境变量都定义在文件 [environment.sh](manifests/environment.sh) 中,请根据**自己的机器、网络情况**修改。然后,把它拷贝到**所有**节点的 `/opt/k8s/bin` 目录:

``` bash
source /opt/k8s/bin/environment.sh
source environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp /opt/k8s/bin/environment.sh root@${node_ip}:/opt/k8s/bin/
scp environment.sh root@${node_ip}:/opt/k8s/bin/
ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
done
```
Expand Down
4 changes: 2 additions & 2 deletions 02.创建CA证书和秘钥.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ CA (Certificate Authority) 是自签名的根证书,用来签名后续创建

本文档使用 `CloudFlare` 的 PKI 工具集 [cfssl](https://github.com/cloudflare/cfssl) 创建所有证书。

注意:如果没有特殊指明,本文档的所有操作**均在 m7-autocv-gpu01 节点上执行**,然后远程分发文件和执行命令。
注意:如果没有特殊指明,本文档的所有操作**均在 zhangjun-k8s01 节点上执行**,然后远程分发文件和执行命令。

## 安装 cfssl 工具集

Expand Down Expand Up @@ -116,7 +116,7 @@ ls ca*

``` bash
cd /opt/k8s/work
source /opt/k8s/bin/environment.sh # 导入 NODE_IPS 环境变量
source /opt/k8s/bin/environment.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
Expand Down
16 changes: 8 additions & 8 deletions 03.部署kubectl命令行工具.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ tags: kubectl

<!-- /TOC -->

kubectl 是 kubernetes 集群的命令行管理工具,本文档介绍安装和配置它的步骤
本文档介绍安装和配置 kubernetes 集群的命令行管理工具 kubectl 的步骤

kubectl 默认从 `~/.kube/config` 文件读取 kube-apiserver 地址、证书、用户名等信息,如果没有配置,执行 kubectl 命令时可能会出错:
kubectl 默认从 `~/.kube/config` 文件读取 kube-apiserver 地址和认证信息,如果没有配置,执行 kubectl 命令时可能会出错:

``` bash
$ kubectl get pods
Expand All @@ -23,16 +23,16 @@ The connection to the server localhost:8080 was refused - did you specify the ri

注意:

1. 如果没有特殊指明,本文档的所有操作**均在 m7-autocv-gpu01 节点上执行**,然后远程分发文件和执行命令
2. 本文档只需要**部署一次**,生成的 kubeconfig 文件是通用的,可以拷贝到需要执行 kubeclt 命令的机器上。
1. 如果没有特殊指明,本文档的所有操作**均在 zhangjun-k8s01 节点上执行**,然后远程分发文件和执行命令
2. 本文档只需要**部署一次**,生成的 kubeconfig 文件是**通用的**,可以拷贝到需要执行 kubectl 命令的机器,重命名为 `~/.kube/config`

## 下载和分发 kubectl 二进制文件

下载和解压:

``` bash
cd /opt/k8s/work
wget https://dl.k8s.io/v1.12.3/kubernetes-client-linux-amd64.tar.gz
wget https://dl.k8s.io/v1.14.2/kubernetes-client-linux-amd64.tar.gz
tar -xzvf kubernetes-client-linux-amd64.tar.gz
```

Expand All @@ -53,7 +53,7 @@ for node_ip in ${NODE_IPS[@]}

kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。

kubectl 作为集群的管理工具,需要被授予最高权限这里创建具有**最高权限**的 admin 证书。
kubectl 作为集群的管理工具,需要被授予最高权限这里创建具有**最高权限**的 admin 证书。

创建证书签名请求:

Expand Down Expand Up @@ -127,7 +127,7 @@ kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
```
+ `--certificate-authority`:验证 kube-apiserver 证书的根证书;
+ `--client-certificate``--client-key`:刚生成的 `admin` 证书和私钥,连接 kube-apiserver 时使用;
+ `--embed-certs=true`:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);
+ `--embed-certs=true`:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径,后续拷贝 kubeconfig 到其它机器时,还需要单独拷贝证书文件,不方便。);

## 分发 kubeconfig 文件

Expand All @@ -143,4 +143,4 @@ for node_ip in ${NODE_IPS[@]}
scp kubectl.kubeconfig root@${node_ip}:~/.kube/config
done
```
+ 保存到用户的 `~/.kube/config` 文件
+ 保存的文件名为 `~/.kube/config`
Loading

0 comments on commit e899135

Please sign in to comment.