update docs

pull/992/head
gjmzj 2021-01-20 17:42:46 +08:00
parent 5ae78116f6
commit 2e4e30eac3
9 changed files with 121 additions and 116 deletions

View File

@ -5,7 +5,7 @@
- **集群特性** `TLS`双向认证、`RBAC`授权、[多Master高可用](docs/setup/00-planning_and_overall_intro.md#ha-architecture)、支持`Network Policy`、备份恢复、[离线安装](docs/setup/offline_install.md) - **集群特性** `TLS`双向认证、`RBAC`授权、[多Master高可用](docs/setup/00-planning_and_overall_intro.md#ha-architecture)、支持`Network Policy`、备份恢复、[离线安装](docs/setup/offline_install.md)
- **集群版本** kubernetes v1.17, v1.18, v1.19, v1.20 - **集群版本** kubernetes v1.17, v1.18, v1.19, v1.20
- **操作系统** CentOS/RedHat 7, Debian 9/10, Ubuntu 1604/1804 - **操作系统** CentOS/RedHat 7, Debian 9/10, Ubuntu 1604/1804
- **运行时** docker 18.06.x-ce, 18.09.x, 19.03.x [containerd](docs/guide/containerd.md) v1.4.3 - **运行时** docker 18.06.x-ce, 18.09.x, 19.03.x [containerd](docs/setup/containerd.md) v1.4.3
- **网络** [calico](docs/setup/network-plugin/calico.md), [cilium](docs/setup/network-plugin/cilium.md), [flannel](docs/setup/network-plugin/flannel.md), [kube-ovn](docs/setup/network-plugin/kube-ovn.md), [kube-router](docs/setup/network-plugin/kube-router.md) - **网络** [calico](docs/setup/network-plugin/calico.md), [cilium](docs/setup/network-plugin/cilium.md), [flannel](docs/setup/network-plugin/flannel.md), [kube-ovn](docs/setup/network-plugin/kube-ovn.md), [kube-router](docs/setup/network-plugin/kube-router.md)
请阅读[项目分支说明](docs/mixes/branch.md), 欢迎提[Issues](https://github.com/easzlab/kubeasz/issues)和[PRs](docs/mixes/HowToContribute.md)参与维护项目!感谢您的关注与支持! 请阅读[项目分支说明](docs/mixes/branch.md), 欢迎提[Issues](https://github.com/easzlab/kubeasz/issues)和[PRs](docs/mixes/HowToContribute.md)参与维护项目!感谢您的关注与支持!
@ -25,7 +25,7 @@
</tr> </tr>
<tr> <tr>
<td><a href="docs/setup/01-CA_and_prerequisite.md">01-创建证书和安装准备</a></td> <td><a href="docs/setup/01-CA_and_prerequisite.md">01-创建证书和安装准备</a></td>
<td><a href="docs/setup/03-install_docker.md">03-安装docker服务</a></td> <td><a href="docs/setup/03-container_runtime.md">03-安装容器运行时</a></td>
<td><a href="docs/setup/05-install_kube_node.md">05-安装node节点</a></td> <td><a href="docs/setup/05-install_kube_node.md">05-安装node节点</a></td>
<td><a href="docs/setup/07-install_cluster_addon.md">07-安装集群插件</a></td> <td><a href="docs/setup/07-install_cluster_addon.md">07-安装集群插件</a></td>
</tr> </tr>
@ -87,7 +87,7 @@
<td><a href="docs/guide/kuboard.md">kuboard</a></td> <td><a href="docs/guide/kuboard.md">kuboard</a></td>
<td><a href="https://github.com/derailed/k9s">k9s</a></td> <td><a href="https://github.com/derailed/k9s">k9s</a></td>
<td><a href="https://github.com/vmware-tanzu/octant">octant</a></td> <td><a href="https://github.com/vmware-tanzu/octant">octant</a></td>
<td><a href="docs/guide/kubesphere.md">KubeSphere容器平台</a></td> <td><a href="docs/guide/kubesphere.md">KubeSphere</a></td>
<td><a href=""></a></td> <td><a href=""></a></td>
<td><a href=""></a></td> <td><a href=""></a></td>
</tr> </tr>

View File

@ -2,62 +2,70 @@
## 什么是 KubeSphere ## 什么是 KubeSphere
[KubeSphere](https://github.com/kubesphere/kubesphere) 是在 [Kubernetes](https://kubernetes.io) 之上构建的**开源企业级容器平台**,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 作为一个**全栈的容器平台**,不仅支持**安装和纳管原生 Kubernetes**,还设计了一套完整的管理界面方便开发者与运维人员在一个**统一的平台** 中安装与管理最常用的云原生工具,**从业务视角提供一致的用户体验来降低复杂性**。目前版本提供以下功能: [KubeSphere](https://github.com/kubesphere/kubesphere) 是在 [Kubernetes](https://kubernetes.io) 之上构建的面向云原生应用的**开源容器平台**,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用 (plug-and-play) 的集成。
KubeSphere 作为一个**全栈的多租户容器平台**,不仅支持**安装和纳管原生 Kubernetes**,还设计了一套完整的管理界面,方便开发者与运维人员在一个**统一的平台**中安装与管理最常用的云原生工具,**从业务视角提供一致的用户体验来降低复杂性**。目前最新的 3.0 版本提供以下功能:
|功能 |介绍 | |功能 |介绍 |
| --- | ---| | --- | ---|
| Kubernetes 集群搭建与运维 | 支持在线 & 离线安装、升级与扩容 K8s 集群,支持安装 “云原生全家桶” | | Kubernetes 集群搭建与运维 | 支持在线 & 离线安装、升级与扩容 Kubernetes 集群,支持安装 “云原生全家桶” |
| Kubernetes 资源可视化管理 | 比 K8s 原生 Dashboard 功能更丰富的控制面板,支持向导式创建与管理 K8s 资源 | | Kubernetes 资源可视化管理 | 比 Kubernetes 原生 Dashboard 功能更丰富的控制面板,支持向导式创建与管理 Kubernetes 资源 |
| 基于 Jenkins 的 DevOps 系统 | 支持图形化与脚本两种方式构建 CI/CD 流水线,内置 Source/Binary to Image 等 CD 工具 | | 基于 Jenkins 的 DevOps 系统 | 支持图形化与脚本两种方式构建 CI/CD 流水线,内置 Source/Binary to Image 等 CD 工具 |
| 应用商店与应用生命周期管理 | 内置 Redis、MySQL 等十个常用应用,基于 Helm 提供应用上传、审核、发布、部署、下架等操作 | | 应用商店与应用生命周期管理 | 内置 Redis、MySQL 等十个常用应用,基于 Helm 提供应用上传、审核、发布、部署、下架等操作 |
| 基于 Istio 的微服务治理 (Service Mesh) | 提供可视化无代码侵入的 **灰度发布、熔断、流量治理与流量拓扑、分布式 Tracing** | | 基于 Istio 的微服务治理 (Service Mesh) | 提供可视化无代码侵入的**灰度发布、熔断机制、流量治理与流量拓扑、分布式链路追踪** |
| 多租户管理 | 提供基于角色的细粒度多租户统一认证,支持 **对接企业 LDAP/AD**,提供多层级的权限管理 | | 多租户管理 | 提供基于角色的细粒度多租户统一认证,支持**对接企业 LDAP/AD**,提供多层级的权限管理 |
| 丰富的可观察性功能 | UI 提供集群/工作负载/Pod/容器等多维度的监控、日志、告警与通知 | | 丰富的可观察性功能 | UI 提供集群/工作负载/Pod/容器等多维度的监控、事件/日志查询、告警与通知管理 |
| 存储管理 | 支持对接 Ceph、GlusterFS、NFS支持可视化管理 PVC、PV、StorageClass | | 存储管理 | 支持对接 Ceph、GlusterFS、NFS支持可视化管理 PVC、PV、StorageClass |
| 网络管理 | 支持 Calico、Flannel提供 Porter LB 帮助暴露物理环境 K8s 集群的 LoadBalancer 服务 | | 网络管理 | 支持 Calico、Flannel提供 Porter LB 帮助暴露物理环境 Kubernetes 集群的 LoadBalancer 服务 |
| GPU support | 集群支持添加 GPU 与 vGPU可运行 TensorFlow 等 ML 框架 | | GPU support | 集群支持添加 GPU 与 vGPU可运行 TensorFlow 等 ML 框架 |
## 在 Kubernetes 与 Kubeasz 之上安装 KubeSphere ## 在 Kubernetes 与 Kubeasz 之上安装 KubeSphere
KubeSphere 可以安装在任何私有或托管的 Kubernetes、私有云、公有云、VM 或物理环境之上,并且所有功能组件都是可插拔的。当使用 Kubeasz 完成 K8s 集群的安装后,可参考以下步骤在 Kubernetes 上安装 KubeSphere v2.1.0 作为一个轻量化容器平台,KubeSphere 可以安装在任何私有或托管的 Kubernetes、虚拟机、裸机、本地环境、公有云、混合云之上,并且所有功能组件都是可插拔的。当使用 Kubeasz 完成 Kubernetes 集群的安装后,可参考以下步骤在 Kubernetes 上安装 KubeSphere。
**前提条件** **前提条件**
> - `Kubernetes 版本` `1.13.0 ≤ K8s version < 1.16` > - Kubernetes 版本必须是1.15.x、1.16.x、1.17.x 或 1.18.x
> - `Helm 版本`: `2.10.0 ≤ Helm 3.0.0`,且已安装了 Tillerv3.0 支持 Helm v3参考 [如何安装与配置 Helm](https://devopscube.com/install-configure-helm-kubernetes/) > - 您的机器满足最低硬件要求CPU > 1 Core可用内存 > 2 G
> - 集群的可用 CPU > 1 C可用内存 > 2 G且集群能够访问外网 > - 安装之前Kubernetes 集群已配置**默认**存储类型 (StorageClass)
> - 集群已有默认的存储类型StorageClass > - 当使用 `--cluster-signing-cert-file``--cluster-signing-key-file` 参数启动时,在 `kube-apiserver` 中会激活 CSR 签名功能。请参见 [RKE 安装问题](https://github.com/kubesphere/kubesphere/issues/1925#issuecomment-591698309)
> - 有关在 Kubernetes 上安装 KubeSphere 的准备工作,请参见[准备工作](https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequisites/)。
> >
> 以上四项可参考 [前提条件](https://kubesphere.io/docs/v2.1/zh-CN/installation/prerequisites/) 进行验证。
1. 若待安装的环境满足以上条件则可以通过一条命令部署 KubeSphere。 1. 若待安装的环境满足以上条件,则可以执行以下命令部署 KubeSphere
```yaml ```yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-minimal.yaml kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.0.0/kubesphere-installer.yaml
```
2. 查看 ks-installer 安装过程中产生的动态日志,等待安装成功(约 10 min 左右): kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.0.0/cluster-configuration.yaml
```
```bash 2. 等待安装成功(取决于您的网络状况,约十几至二十几分钟不等),运行以下命令查看安装日志:
$ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
```
![](https://pek3b.qingstor.com/kubesphere-docs/png/20191005195724.png) ```bash
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
```
3. 当 KubeSphere 的所有 Pod 都为 Running 则说明安装成功。使用 `http://IP:30880` 访问 Dashboard默认账号为 `admin/P@88w0rd` ![](https://pek3b.qingstor.com/kubesphere-docs/png/20191005195724.png)
3. 使用 `kubectl get pod --all-namespaces` 查看所有 Pod 是否在 KubeSphere 的相关命名空间中正常运行。如果是,请通过以下命令检查控制台的端口(默认为 `30880`
**Tips**KubeSphere 在 K8s 默认仅开启 **最小化安装**,执行以下命令开启可插拔功能组件的安装,开启安装前确认您的机器资源已符合 [资源最低要求](https://kubesphere.io/docs/v2.1/zh-CN/installation/intro/#%E5%8F%AF%E6%8F%92%E6%8B%94%E5%8A%9F%E8%83%BD%E7%BB%84%E4%BB%B6%E5%88%97%E8%A1%A8)。 ```bash
kubectl get svc/ks-console -n kubesphere-system
```
``` 4. 请确保在安全组中打开了端口 `30880`,并通过 NodePort `(IP:30880)` 使用默认帐户和密码 `(admin/P@88w0rd)` 访问 Web 控制台。
$ kubectl edit cm -n kubesphere-system ks-installer
``` 5. 登录控制台后,您可以在**服务组件**中查看不同组件的状态。如果要使用相关服务,可能需要等待某些组件启动并运行。
**Tips**:若要在 KubeSphere 中启用其他组件,请参见[启用可插拔组件](https://kubesphere.io/zh/docs/pluggable-components/)。开启安装前确认您的机器资源已符合[资源最低要求](https://kubesphere.io/zh/docs/pluggable-components/overview/)。
## 延伸阅读 ## 延伸阅读
- [安装 Kubeasz 与 KubeSphere](https://kubesphere.com.cn/forum/d/716-play-with-kubesphere-and-kubeasz) - [安装 Kubeasz 与 KubeSphere](https://kubesphere.com.cn/forum/d/716-play-with-kubesphere-and-kubeasz)
- [在 Linux 完整安装 KubeSphere 与 Kubernetes](https://kubesphere.com.cn/docs/v2.1/zh-CN/installation/intro/) - [在 Linux 完整安装 KubeSphere 与 Kubernetes](https://kubesphere.io/zh/docs/installing-on-linux/introduction/intro/)
- [KubeSphere 官网](https://kubesphere.com.cn/zh-CN/) - [KubeSphere 官网](https://kubesphere.io/zh/)
- [常见问题](https://kubesphere.io/zh/docs/faq/)

View File

@ -63,7 +63,7 @@ apt-get install git python-pip -y
yum install git python-pip -y yum install git python-pip -y
# pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速) # pip安装ansible(国内如果安装太慢可以直接用pip阿里云加速)
pip install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/ pip install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/
pip install ansible==2.6.18 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/ pip install ansible netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/
``` ```
- 3.2 在ansible控制端配置免密码登录 - 3.2 在ansible控制端配置免密码登录
@ -119,8 +119,6 @@ ezctl setup k8s-01 all
... ...
``` ```
+ [可选]对集群所有节点进行操作系统层面的安全加固 `ansible-playbook roles/os-harden/os-harden.yml`,详情请参考[os-harden项目](https://github.com/dev-sec/ansible-os-hardening)
## Appendix ## Appendix
- Ubuntu 1604 安装 ansible 如果出现以下错误 - Ubuntu 1604 安装 ansible 如果出现以下错误

View File

@ -1,36 +1,21 @@
# 01-创建证书和环境准备 # 01-创建证书和环境准备
本步骤[01.prepare.yml](../../01.prepare.yml)主要完成: 本步骤主要完成:
- [chrony role](../guide/chrony.md): 集群节点时间同步[可选] - (optional) role:os-harden可选系统加固符合linux安全基线详见[upstream](https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/os_hardening)
- deploy role: 创建CA证书、集群组件访问apiserver所需的各种kubeconfig - (optional) role:chrony[可选集群节点时间同步](../guide/chrony.md)
- prepare role: 系统基础环境配置、分发CA证书、kubectl客户端安装 - role:deploy创建CA证书、集群组件访问apiserver所需的各种kubeconfig
- role:prepare系统基础环境配置、分发CA证书、kubectl客户端安装
## deploy 角色 ## deploy 角色
请在另外窗口打开[roles/deploy/tasks/main.yml](../../roles/deploy/tasks/main.yml) 文件,对照看以下讲解内容。 主要任务讲解roles/deploy/tasks/main.yml
### 创建 CA 证书 ### 创建 CA 证书
``` bash
roles/deploy/
├── defaults
│   └── main.yml # 配置文件证书有效期kubeconfig 相关配置
├── files
│   └── read-group-rbac.yaml # 只读用户的 rbac 权限配置
├── tasks
│   └── main.yml # 主任务脚本
└── templates
├── admin-csr.json.j2 # kubectl客户端使用的admin证书请求模板
├── ca-config.json.j2 # ca 配置文件模板
├── ca-csr.json.j2 # ca 证书签名请求模板
├── kube-proxy-csr.json.j2 # kube-proxy使用的证书请求模板
└── read-csr.json.j2 # kubectl客户端使用的只读证书请求模板
```
kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集生成自签名的 CA 证书,用来签名后续创建的其它 TLS 证书。[参考阅读](https://coreos.com/os/docs/latest/generate-self-signed-certificates.html) kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集生成自签名的 CA 证书,用来签名后续创建的其它 TLS 证书。[参考阅读](https://coreos.com/os/docs/latest/generate-self-signed-certificates.html)
根据认证对象可以将证书分成三类:服务器证书`server cert`,客户端证书`client cert`,对等证书`peer cert`(表示既是`server cert`又是`client cert`)在kubernetes 集群中需要的证书种类如下: 根据认证对象可以将证书分成三类:服务器证书`server cert`,客户端证书`client cert`,对等证书`peer cert`(既是`server cert`又是`client cert`)在kubernetes 集群中需要的证书种类如下:
+ `etcd` 节点需要标识自己服务的`server cert`,也需要`client cert`与`etcd`集群其他节点交互当然可以分别指定2个证书为方便这里使用一个对等证书 + `etcd` 节点需要标识自己服务的`server cert`,也需要`client cert`与`etcd`集群其他节点交互当然可以分别指定2个证书为方便这里使用一个对等证书
+ `master` 节点需要标识 apiserver服务的`server cert`,也需要`client cert`连接`etcd`集群,这里也使用一个对等证书 + `master` 节点需要标识 apiserver服务的`server cert`,也需要`client cert`连接`etcd`集群,这里也使用一个对等证书
@ -44,7 +29,7 @@ kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用
{ {
"signing": { "signing": {
"default": { "default": {
"expiry": "87600h" "expiry": "{{ CERT_EXPIRY }}"
}, },
"profiles": { "profiles": {
"kubernetes": { "kubernetes": {
@ -54,7 +39,17 @@ kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用
"server auth", "server auth",
"client auth" "client auth"
], ],
"expiry": "87600h" "expiry": "{{ CERT_EXPIRY }}"
}
},
"profiles": {
"kcfg": {
"usages": [
"signing",
"key encipherment",
"client auth"
],
"expiry": "{{ CUSTOM_EXPIRY }}"
} }
} }
} }
@ -63,7 +58,8 @@ kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用
+ `signing`:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 `CA=TRUE` + `signing`:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 `CA=TRUE`
+ `server auth`:表示可以用该 CA 对 server 提供的证书进行验证; + `server auth`:表示可以用该 CA 对 server 提供的证书进行验证;
+ `client auth`:表示可以用该 CA 对 client 提供的证书进行验证; + `client auth`:表示可以用该 CA 对 client 提供的证书进行验证;
+ `profile kubernetes` 包含了`server auth`和`client auth`,所以可以签发三种不同类型证书; + `profile kubernetes` 包含了`server auth`和`client auth`所以可以签发三种不同类型证书expiry 证书有效期默认50年
+ `profile kcfg` 在后面客户端kubeconfig证书管理中用到
#### 创建 CA 证书签名请求 [ca-csr.json.j2](../../roles/deploy/templates/ca-csr.json.j2) #### 创建 CA 证书签名请求 [ca-csr.json.j2](../../roles/deploy/templates/ca-csr.json.j2)
``` bash ``` bash
@ -87,6 +83,7 @@ kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用
} }
} }
``` ```
- `ca expiry` 指定ca证书的有效期默认100年
#### 生成CA 证书和私钥 #### 生成CA 证书和私钥
``` bash ``` bash
@ -214,10 +211,9 @@ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
请在另外窗口打开[roles/prepare/tasks/main.yml](../../roles/prepare/tasks/main.yml) 文件,比较简单直观 请在另外窗口打开[roles/prepare/tasks/main.yml](../../roles/prepare/tasks/main.yml) 文件,比较简单直观
1. 首先设置基础操作系统软件和系统参数,请阅读脚本中的注释内容 1. 设置基础操作系统软件和系统参数,请阅读脚本中的注释内容
1. 首先创建一些基础文件目录 1. 创建一些基础文件目录
1. 把证书工具 CFSSL 下发到指定节点并下发kubeconfig配置文件 1. 分发kubeconfig配置文件
1. 把CA 证书相关下发到指定节点的 {{ ca_dir }} 目录
[后一篇](02-install_etcd.md) [后一篇](02-install_etcd.md)

View File

@ -4,18 +4,20 @@ kuberntes 集群使用 etcd 存储所有数据,是最重要的组件之一,
请在另外窗口打开[roles/etcd/tasks/main.yml](../../roles/etcd/tasks/main.yml) 文件,对照看以下讲解内容。 请在另外窗口打开[roles/etcd/tasks/main.yml](../../roles/etcd/tasks/main.yml) 文件,对照看以下讲解内容。
### 下载etcd/etcdctl 二进制文件、创建证书目录 ### 创建etcd证书
https://github.com/etcd-io/etcd/releases 注意证书是在部署节点创建好之后推送到目标etcd节点上去的以增加ca证书的安全性
### 创建etcd证书请求 [etcd-csr.json.j2](../../roles/etcd/templates/etcd-csr.json.j2) 创建ectd证书请求 [etcd-csr.json.j2](../../roles/etcd/templates/etcd-csr.json.j2)
``` bash ``` bash
{ {
"CN": "etcd", "CN": "etcd",
"hosts": [ "hosts": [
"127.0.0.1", {% for host in groups['etcd'] %}
"{{ inventory_hostname }}" "{{ host }}",
{% endfor %}
"127.0.0.1"
], ],
"key": { "key": {
"algo": "rsa", "algo": "rsa",
@ -32,22 +34,10 @@ https://github.com/etcd-io/etcd/releases
] ]
} }
``` ```
+ etcd使用对等证书hosts 字段必须指定授权使用该证书的 etcd 节点 IP + etcd使用对等证书hosts 字段必须指定授权使用该证书的 etcd 节点 IP这里枚举了所有ectd节点的地址
### 创建证书和私钥
``` bash
cd /etc/etcd/ssl && {{ bin_dir }}/cfssl gencert \
-ca={{ ca_dir }}/ca.pem \
-ca-key={{ ca_dir }}/ca-key.pem \
-config={{ ca_dir }}/ca-config.json \
-profile=kubernetes etcd-csr.json | {{ bin_dir }}/cfssljson -bare etcd
```
### 创建etcd 服务文件 [etcd.service.j2](../../roles/etcd/templates/etcd.service.j2) ### 创建etcd 服务文件 [etcd.service.j2](../../roles/etcd/templates/etcd.service.j2)
先创建工作目录 /var/lib/etcd/
``` bash ``` bash
[Unit] [Unit]
Description=Etcd Server Description=Etcd Server
@ -60,11 +50,11 @@ Documentation=https://github.com/coreos
Type=notify Type=notify
WorkingDirectory=/var/lib/etcd/ WorkingDirectory=/var/lib/etcd/
ExecStart={{ bin_dir }}/etcd \ ExecStart={{ bin_dir }}/etcd \
--name={{ NODE_NAME }} \ --name=etcd-{{ inventory_hostname }} \
--cert-file=/etc/etcd/ssl/etcd.pem \ --cert-file={{ ca_dir }}/etcd.pem \
--key-file=/etc/etcd/ssl/etcd-key.pem \ --key-file={{ ca_dir }}/etcd-key.pem \
--peer-cert-file=/etc/etcd/ssl/etcd.pem \ --peer-cert-file={{ ca_dir }}/etcd.pem \
--peer-key-file=/etc/etcd/ssl/etcd-key.pem \ --peer-key-file={{ ca_dir }}/etcd-key.pem \
--trusted-ca-file={{ ca_dir }}/ca.pem \ --trusted-ca-file={{ ca_dir }}/ca.pem \
--peer-trusted-ca-file={{ ca_dir }}/ca.pem \ --peer-trusted-ca-file={{ ca_dir }}/ca.pem \
--initial-advertise-peer-urls=https://{{ inventory_hostname }}:2380 \ --initial-advertise-peer-urls=https://{{ inventory_hostname }}:2380 \
@ -73,18 +63,25 @@ ExecStart={{ bin_dir }}/etcd \
--advertise-client-urls=https://{{ inventory_hostname }}:2379 \ --advertise-client-urls=https://{{ inventory_hostname }}:2379 \
--initial-cluster-token=etcd-cluster-0 \ --initial-cluster-token=etcd-cluster-0 \
--initial-cluster={{ ETCD_NODES }} \ --initial-cluster={{ ETCD_NODES }} \
--initial-cluster-state=new \ --initial-cluster-state={{ CLUSTER_STATE }} \
--data-dir=/var/lib/etcd --data-dir=/var/lib/etcd \
Restart=on-failure --snapshot-count=50000 \
RestartSec=5 --auto-compaction-retention=1 \
--max-request-bytes=10485760 \
--auto-compaction-mode=periodic \
--quota-backend-bytes=8589934592
Restart=always
RestartSec=15
LimitNOFILE=65536 LimitNOFILE=65536
OOMScoreAdjust=-999
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
``` ```
+ 完整参数列表请使用 `etcd --help` 查询 + 完整参数列表请使用 `etcd --help` 查询
+ 注意etcd 即需要服务器证书也需要客户端证书这里为方便使用一个peer 证书代替两个证书,更多证书相关请阅读 [01-创建CA证书和环境配置](01-CA_and_prerequisite.md) + 注意etcd 即需要服务器证书也需要客户端证书为方便使用一个peer 证书代替两个证书
+ `--initial-cluster-state` 值为 `new` 时,`--name` 的参数值必须位于 `--initial-cluster` 列表中; + `--initial-cluster-state` 值为 `new` 时,`--name` 的参数值必须位于 `--initial-cluster` 列表中
+ `--snapshot-count` `--auto-compaction-retention` 一些性能优化参数请查阅etcd项目
### 启动etcd服务 ### 启动etcd服务
@ -118,4 +115,4 @@ https://192.168.1.3:2379 is healthy: successfully committed proposal: took = 3.2
``` ```
三台 etcd 的输出均为 healthy 时表示集群服务正常。 三台 etcd 的输出均为 healthy 时表示集群服务正常。
[后一篇](03-install_docker.md) [后一篇](03-container_runtime.md)

View File

@ -1,20 +1,8 @@
## 03-安装docker服务 ## 03-安装容器运行时docker or containerd
``` bash 目前k8s官方推荐使用containerd查阅[使用文档](containerd.md)
roles/docker/
├── defaults
│   └── main.yml # 变量配置文件
├── files
│   ├── docker # bash 自动补全
│   └── docker-tag # 查询镜像tag的小工具
├── tasks
│   └── main.yml # 主执行文件
└── templates
├── daemon.json.j2 # docker daemon 配置文件
└── docker.service.j2 # service 服务模板
```
请在另外窗口打开[roles/docker/tasks/main.yml](../../roles/docker/tasks/main.yml) 文件,对照看以下讲解内容。 ## 安装docker服务
### 创建docker的systemd unit文件 ### 创建docker的systemd unit文件
@ -43,23 +31,39 @@ WantedBy=multi-user.target
+ docker 从 1.13 版本开始,将`iptables` 的`filter` 表的`FORWARD` 链的默认策略设置为`DROP`,从而导致 ping 其它 Node 上的 Pod IP 失败,因此必须在 `filter` 表的`FORWARD` 链增加一条默认允许规则 `iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT` + docker 从 1.13 版本开始,将`iptables` 的`filter` 表的`FORWARD` 链的默认策略设置为`DROP`,从而导致 ping 其它 Node 上的 Pod IP 失败,因此必须在 `filter` 表的`FORWARD` 链增加一条默认允许规则 `iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT`
+ 运行`dockerd --help` 查看所有可配置参数,确保默认开启 `--iptables``--ip-masq` 选项 + 运行`dockerd --help` 查看所有可配置参数,确保默认开启 `--iptables``--ip-masq` 选项
### 配置国内镜像加速 ### 配置daemon.json
从国内下载docker官方仓库镜像非常缓慢所以对于k8s集群来说配置镜像加速非常重要配置 `/etc/docker/daemon.json` roles/docker/templates/daemon.json.j2
``` bash ``` bash
{ {
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "data-root": "{{ DOCKER_STORAGE_DIR }}",
"exec-opts": ["native.cgroupdriver=cgroupfs"],
{% if ENABLE_MIRROR_REGISTRY %}
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
{% endif %}
{% if ENABLE_REMOTE_API %}
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
{% endif %}
"insecure-registries": {{ INSECURE_REG }},
"max-concurrent-downloads": 10, "max-concurrent-downloads": 10,
"live-restore": true,
"log-driver": "json-file", "log-driver": "json-file",
"log-level": "warn", "log-level": "warn",
"log-opts": { "log-opts": {
"max-size": "10m", "max-size": "15m",
"max-file": "3" "max-file": "3"
} },
"storage-driver": "overlay2"
} }
``` ```
从国内下载docker官方仓库镜像非常缓慢所以对于k8s集群来说配置镜像加速非常重要配置 `/etc/docker/daemon.json`
这将在后续部署calico下载 calico/node镜像和kubedns/heapster/dashboard镜像时起到加速效果。 这将在后续部署calico下载 calico/node镜像和kubedns/heapster/dashboard镜像时起到加速效果。
由于K8S的官方镜像存放在`gcr.io`仓库因此这个镜像加速对K8S的官方镜像没有效果好在`Docker Hub`上有很多K8S镜像的转存而`Docker Hub`上的镜像可以加速。这里推荐两个K8S镜像的`Docker Hub`项目,几乎能找到所有K8S相关的镜像而且更新及时感谢维护者的辛勤付出 由于K8S的官方镜像存放在`gcr.io`仓库因此这个镜像加速对K8S的官方镜像没有效果好在`Docker Hub`上有很多K8S镜像的转存而`Docker Hub`上的镜像可以加速。这里推荐两个K8S镜像的`Docker Hub`项目,几乎能找到所有K8S相关的镜像而且更新及时感谢维护者的辛勤付出

2
ezctl
View File

@ -486,7 +486,7 @@ function main() {
readlink /proc/$$/exe|grep -q "dash" && { logger error "you should use bash shell only"; exit 1; } readlink /proc/$$/exe|grep -q "dash" && { logger error "you should use bash shell only"; exit 1; }
# check 'ansible' executable # check 'ansible' executable
which ansible > /dev/null 2>&1 || { logger error "need 'ansible', try: 'pip install ansible==2.6.18'"; usage; exit 1; } which ansible > /dev/null 2>&1 || { logger error "need 'ansible', try: 'pip install ansible'"; usage; exit 1; }
[ "$#" -gt 0 ] || { usage >&2; exit 2; } [ "$#" -gt 0 ] || { usage >&2; exit 2; }

View File

@ -30,6 +30,7 @@
name: '{{ os_packages_pam_passwdqc }}' name: '{{ os_packages_pam_passwdqc }}'
state: 'present' state: 'present'
update_cache: 'yes' update_cache: 'yes'
ignore_errors: true
when: when:
- ansible_facts.distribution in ['Debian', 'Ubuntu'] - ansible_facts.distribution in ['Debian', 'Ubuntu']
- os_auth_pam_passwdqc_enable - os_auth_pam_passwdqc_enable
@ -97,6 +98,7 @@
yum: yum:
name: '{{ os_packages_pam_passwdqc }}' name: '{{ os_packages_pam_passwdqc }}'
state: 'present' state: 'present'
ignore_errors: true
when: when:
- ansible_facts.os_family == 'RedHat' - ansible_facts.os_family == 'RedHat'
- ansible_facts.distribution_major_version|int is version('7', '<') - ansible_facts.distribution_major_version|int is version('7', '<')