[TOC]
## **一、主机准备**
准备三台主机,和一个VIP
* master1:192.168.2.104
* master2:192.168.2.105
* master3:192.168.2.106
* vip:192.168.2.110
在每台主机的`/etc/hosts`中添加记录
```
192.168.2.110 apiserver.dcos.com
```
## **二、安装docker、kubeadm、kubelet、keepalived**
略
## **三、安装Master**
### **3.1 下载镜像**
下载镜像到各master节点,参考《安装单Master集群》
### **3.2 安装Master1**
执行以下命令,安装Master,安装成功后会有类似如下输出
```
$ kubeadm init --control-plane-endpoint apiserver.dcos.com:6443 --pod-network-cidr 172.26.0.0/16 --kubernetes-version 1.17.0...You can now join any number of control-plane nodes by copying certificate authoritiesand service account keys on each node and then running the following as root: kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 \ --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376 \ --control-plane Then you can join any number of worker nodes by running the following on each as root:kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 \ --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376
```
然后设置`kubectl`与安装Calico,参考《安装单Master集群》。
### **3.3 分发证书文件**
在其他两个Master节点上,创建目录`/etc/kubernetes/pki`与`/etc/kubernetes/pki/etcd`,然后把Master1上的以下证书文件拷贝到其余Master相同的目录下:
```
/etc/kubernetes/pki/ca.key/etc/kubernetes/pki/ca.crt/etc/kubernetes/pki/sa.key/etc/kubernetes/pki/sa.pub/etc/kubernetes/pki/front-proxy-ca.key/etc/kubernetes/pki/front-proxy-ca.crt/etc/kubernetes/pki/etcd/ca.key/etc/kubernetes/pki/etcd/ca.crt
```
### **3.4 安装其他master**
根据上面的输出,可以执行下面的命令安装其他的master
```
$ kubeadm join apiserver.dcos.com:6443 --token hcqgtn.l3915wh83gxktkl0 --discovery-token-ca-cert-hash sha256:0acd092192699c3743ba1af4e6f24aa9bffcde265f3f60cee172a9fea0889376 --control-plane
```
安装成功后, 查看节点的状态,发现新节点添加成功
```
kubectl get nodeNAME STATUS ROLES AGE VERSIONpeng04 Ready master 17h v1.17.0peng05 Ready master 35s v1.17.0
```
## **四、安装Node**
略
## **附录**
在该文中,每个Master节点的上面八个文件必须一致
### **ca.key与ca.crt**
ca.key与ca.crt是指`/etc/kubernetes/pki/ca.key`与`/etc/kubernetes/pki/ca.crt`。
ca.crt出现在apiserver的启动参数中`--client-ca-file=/etc/kubernetes/pki/ca.crt`,它的作用就是apiserver用来认证客户端证书,原理具体见《认证》。
首先,为什么每个master节点的ca.key与ca.crt为什么需要一致?
因为,我们要的效果是,当有多个Master时,客户端携带一个客户证书访问其中任何一个都是可以的。而如果三个Master上的ca.key与ca.crt不一致,那么客户端的证书应该由哪个CA签署呢?所以,三个节点的必须一致。
第二,apiserver的启动参数没有用到ca.key,为什么还要从第一台master同步到其他master呢?
因为,每个Master上都会生成一个`/etc/kubernetes/admin.conf`文件,里面的内容其实就是一个客户证书,由ca.key和ca.crt签署的,所以还需要ca.key。
### **sa.key与sa.pub**
sa.key出现在kube-controller-manager的启动参数`--service-account-private-key-file=/etc/kubernetes/pki/sa.key`,sa.pub出现在kube-apiserver的启动参数`--service-account-key-file=/etc/kubernetes/pki/sa.pub`,这两个参数的原理见《ServiceAccount》
与上面的原因类似。
其实,启动参数的内容,由于没有存储在etcd中,所以每个节点都必须要指定,且一致。
### **front-proxy-ca.key与front-proxy-ca.crt**
???
### **etcd/ca.key与/etc/ca.crt**
参考 《启动参数解析》 之 《ETCD相关参数》
- 常用命令
- 安装
- 安装Kubeadm
- 安装单Master集群
- 安装高可用集群(手动分发证书)
- 安装高可用集群(自动分发证书)
- 启动参数解析
- certificate-key
- ETCD相关参数
- Kubernetes端口汇总
- 安装IPv4-IPv6双栈集群
- 下载二进制文件
- 使用Kata容器
- 快速安装shell脚本
- 存储
- 实践
- Ceph-RBD实践
- CephFS实践
- 对象存储
- 阿里云CSI
- CSI
- 安全
- 认证与授权
- 认证
- 认证-实践
- 授权
- ServiceAccount
- NodeAuthorizor
- TLS bootstrapping
- Kubelet的认证
- 准入控制
- 准入控制示例
- Pod安全上下文
- Selinux-Seccomp-Capabilities
- 给容器配置安全上下文
- PodSecurityPolicy
- K8S-1.8手动开启认证与授权
- Helm
- Helm命令
- Chart
- 快速入门
- 内置对象
- 模板函数与管道
- 模板函数列表
- 流程控制
- Chart依赖
- Repository
- 开源的Chart包
- CRD
- CRD入门
- 工作负载
- Pod
- Pod的重启策略
- Container
- 探针
- 工作负载的状态
- 有状态服务
- 网络插件
- Multus
- Calico+Flannel
- 容器网络限速
- 自研网络插件
- 设计文档
- Cilium
- 安装Cilium
- Calico
- Calico-FAQ
- IPAM
- Whereabouts
- 控制平面与Pod网络分开
- 重新编译
- 编译kubeadm
- 编译kubeadm-1.23
- 资源预留
- 资源预留简介
- imagefs与nodefs
- 资源预留 vs 驱逐 vs OOM
- 负载均衡
- 灰度与蓝绿
- Ingress的TLS
- 多个NginxIngressController实例
- Service的会话亲和
- CNI实践
- CNI规范
- 使用cnitool模拟调用
- CNI快速入门
- 性能测试
- 性能测试简介
- 制作kubemark镜像
- 使用clusterloader2进行性能测试
- 编译clusterloader2二进制文件
- 搭建性能测试环境
- 运行density测试
- 运行load测试
- 参数调优
- Measurement
- TestMetrics
- EtcdMetrics
- SLOMeasurement
- PrometheusMeasurement
- APIResponsivenessPrometheus
- PodStartupLatency
- FAQ
- 调度
- 亲和性与反亲和性
- GPU
- HPA
- 命名规范
- 可信云认证
- 磁盘限速
- Virtual-kubelet
- VK思路整理
- Kubebuilder
- FAQ
- 阿里云日志服务SLS