deploy
15
install/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# 概述
|
||||
|
||||
Kuboard 作为一个 Deployment 运行在 Kubernetes 集群中,通过 apiserver 操作 Kubernetes 集群。 Kuboard 安装的唯一依赖条件是 Kubernetes 集群,Kuboard 可兼容 Kubernetes 1.10 以上的版本,目前已经在 Kubernetes 1.14、1.15 上验证了 Kuboard。
|
||||
|
||||
如果您已经有一个 Kubernetes 集群,请直接 [安装 Kuboard](install-dashboard)。
|
||||
|
||||
如果您当下没有 Kubernetes 集群:
|
||||
* 想要安装一个简单的集群,对 Kuboard 进行测试, 请 [安装 Kubernetes 用于测试](install-k8s)
|
||||
* 想要安装一个高可用的集群,并使用 Kuboard 进行管理,请 [安装 Kubernetes 高可用](install-kubernetes)
|
||||
|
||||
<br>
|
||||
|
||||
**在线提问**
|
||||
|
||||

|
||||
49
install/install-common-ingress.md
Normal file
@ -0,0 +1,49 @@
|
||||
## 安装 Ingress Controller
|
||||
|
||||
> ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
>
|
||||
> Ingress Controllers官网介绍:[https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)
|
||||
>
|
||||
> 本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge
|
||||
>
|
||||
> kubernetes支持多种Ingress Controllers,本文推荐使用
|
||||
>
|
||||
> https://github.com/nginxinc/kubernetes-ingress
|
||||
|
||||
|
||||
|
||||
### 在 apple-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
su - gitlab-runner
|
||||
kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 在IaaS云控制台完成如下配置(**公网ELB**)
|
||||
|
||||
创建负载均衡 ELB:
|
||||
|
||||
监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持
|
||||
|
||||
服务器资源池 1: apple-worker-x-x 的所有节点的 80端口
|
||||
|
||||
监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持
|
||||
|
||||
服务器资源池 2: apple-worker-x-x 的所有节点的443端口
|
||||
|
||||
假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z
|
||||
|
||||
|
||||
|
||||
### 配置域名解析
|
||||
|
||||
将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z
|
||||
|
||||
|
||||
|
||||
### 验证配置
|
||||
|
||||
在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面
|
||||
|
||||
BIN
install/install-common-vm.assets/image-20190715085036593.png
Normal file
|
After Width: | Height: | Size: 230 KiB |
BIN
install/install-common-vm.assets/image2019-07-15_09.01.21.png
Normal file
|
After Width: | Height: | Size: 194 KiB |
216
install/install-common-vm.md
Normal file
@ -0,0 +1,216 @@
|
||||
## 制作标准机镜像
|
||||
|
||||
通过使用标准机镜像,可以
|
||||
|
||||
- **避免重复执行对测试机安装必要软件的过程**
|
||||
- **以一种相对标准化的过程管理测试机的维护**
|
||||
|
||||
标准机镜像中预装了如下内容:
|
||||
|
||||
- docker
|
||||
- gitlab-runner
|
||||
- kubernetes images
|
||||
|
||||
本文档描述的安装过程已基于 centos 7.6 验证
|
||||
|
||||
标准机镜像的制作过程描述如下:
|
||||
|
||||
### 安装docker
|
||||
|
||||
**卸载旧版本**
|
||||
|
||||
```bash
|
||||
sudo yum remove docker \
|
||||
docker-client \
|
||||
docker-client-latest \
|
||||
docker-common \
|
||||
docker-latest \
|
||||
docker-latest-logrotate \
|
||||
docker-logrotate \
|
||||
docker-selinux \
|
||||
docker-engine-selinux \
|
||||
docker-engine
|
||||
```
|
||||
|
||||
**下载依赖包及安装包**
|
||||
|
||||
```bash
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
```
|
||||
|
||||
**安装**
|
||||
|
||||
```bash
|
||||
sudo yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
**启动 docker 服务**
|
||||
|
||||
```bash
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
**检查 docker 版本**
|
||||
|
||||
```bash
|
||||
docker version
|
||||
```
|
||||
|
||||
|
||||
|
||||
**参考文档**
|
||||
|
||||
https://docs.docker.com/install/linux/docker-ce/centos/
|
||||
|
||||
https://docs.docker.com/install/linux/linux-postinstall/
|
||||
|
||||
|
||||
|
||||
### 安装 nfs-utils
|
||||
|
||||
**执行安装命令**
|
||||
|
||||
```bash
|
||||
sudo yum install nfs-utils
|
||||
```
|
||||
|
||||
必须先安装 nfs-utils 才能挂载 nfs 网络存储
|
||||
|
||||
|
||||
|
||||
### K8S基本配置
|
||||
|
||||
**配置K8S的yum源**
|
||||
|
||||
```bash
|
||||
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
repo_gpgcheck=0
|
||||
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
|
||||
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
```
|
||||
|
||||
**关闭swap、防火墙**
|
||||
|
||||
```bash
|
||||
swapoff -a
|
||||
```
|
||||
|
||||
**关闭SeLinux**
|
||||
|
||||
```bash
|
||||
setenforce 0
|
||||
```
|
||||
|
||||
**修改 /etc/sysctl.conf**
|
||||
|
||||
```vim /etc/sysctl.conf```
|
||||
|
||||
向其中添加
|
||||
|
||||
```
|
||||
net.ipv4.ip_forward = 1
|
||||
net.bridge.bridge-nf-call-ip6tables = 1
|
||||
net.bridge.bridge-nf-call-iptables = 1
|
||||
```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**安装kubelet、kubeadm、kubectl**
|
||||
|
||||
```bash
|
||||
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
|
||||
```
|
||||
|
||||
|
||||
|
||||
**修改docker Cgroup Driver为systemd**
|
||||
|
||||
```vim /usr/lib/systemd/system/docker.service```
|
||||
|
||||
向其中他添加
|
||||
|
||||
```--exec-opt native.cgroupdriver=systemd```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
重启 docker
|
||||
|
||||
```
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
|
||||
|
||||
**启动kubelet**
|
||||
|
||||
```bash
|
||||
systemctl enable kubelet && systemctl start kubelet
|
||||
```
|
||||
|
||||
|
||||
|
||||
**加载 kubernetes 镜像**
|
||||
|
||||
由于k8s服务相关镜像在国外镜像源,国内无法访问
|
||||
|
||||
执行以下命令添加docker k8s国内镜像源
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
|
||||
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
**拉取k8s相关镜像**
|
||||
|
||||
```bash
|
||||
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
|
||||
docker pull mirrorgooglecontainers/pause:3.1
|
||||
docker pull mirrorgooglecontainers/etcd:3.3.10
|
||||
docker pull coredns/coredns:1.3.1
|
||||
```
|
||||
|
||||
**更改镜像名为k8s官网镜像**
|
||||
|
||||
```bash
|
||||
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
|
||||
docker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0
|
||||
docker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0
|
||||
docker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0
|
||||
docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
|
||||
docker tag eb516548c180 k8s.gcr.io/coredns:1.3.1
|
||||
docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10
|
||||
```
|
||||
|
||||
|
||||
|
||||
**制作镜像**
|
||||
|
||||
请参考阿里云基于ECS [制作虚拟机镜像](https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV) 的文档
|
||||
|
||||
|
||||
128
install/install-dashboard.md
Normal file
@ -0,0 +1,128 @@
|
||||
# 安装 kuboard
|
||||
|
||||
## 前提
|
||||
|
||||
安装 kuboard 时,假设您已经:
|
||||
|
||||
* 已经有一个 kubernetes 集群
|
||||
* 拥有对该 kubernetes 集群执行 kubectl 命令时的所有权限
|
||||
|
||||
如果没有 kubernetes 集群,可以有如下选项:
|
||||
|
||||
* 通过 阿里云 创建 kubernetes 容器服务,并获得和配置 kubectl 的访问参数
|
||||
* 参考 [安装 kubernetes 用于测试](install-k8s)
|
||||
* 或参考 [安装 kubernetes 高可用](install-kubernetes)
|
||||
|
||||
[领取阿里云最高2000元红包](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg)
|
||||
|
||||
|
||||
|
||||
## 兼容性
|
||||
|
||||
|
||||
|
||||
| Kubernetes 版本 | Kuboard 版本 | 兼容性 | 说明 |
|
||||
| --------------- | -------------- | ------ | ------------------------------------------------------------ |
|
||||
| v1.15 | v1.0.0-beta.10 | <span style="font-size: 24px;">😄</span> | Kuboard作者所使用的Kubernetes版本 |
|
||||
| v1.14 | v1.0.0-beta.10 | <span style="font-size: 24px;">😄</span> | Kuboard作者所使用的Kubernetes版本 |
|
||||
| v1.13 | v1.0.0-beta.10 | <span style="font-size: 24px;">🤔</span> | 理论上可以,尚未听到用户反馈兼容性问题 |
|
||||
| v1.12 | v1.0.0-beta.10 | <span style="font-size: 24px;">😐</span> | Kubernetes Api 尚不支持 dryRun,<br />忽略Kuboard在执行命令式的参数校验错误,可正常工作 |
|
||||
| v1.11 | v1.0.0-beta.10 | <span style="font-size: 24px;">😐</span> | 同上 |
|
||||
|
||||
|
||||
|
||||
**Kubernetes 安装方式**
|
||||
|
||||
> * 部分用户使用二进制包的形式安装 Kubernetes,Kuboard 现在的版本不能在这类 Kubernetes 集群中正常工作,作者正在解决此问题。
|
||||
> * 如果您是使用 kubeadm 安装的 Kubernetes 集群(Kubernetes 官方推荐的安装方式),请放心使用 Kuboard。
|
||||
> * Kubeadm 相关资料请参考 https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
|
||||
|
||||
|
||||
|
||||
## 安装
|
||||
|
||||
**获取并修改yaml文件**
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml
|
||||
```
|
||||
|
||||
修改文件 kuboard.yaml 中 Ingress 的 host 为 kuboard.yourclustername.yourdomain.com
|
||||
|
||||
**执行安装**
|
||||
|
||||
```bash
|
||||
kubectl apply -f kuboard.yaml
|
||||
```
|
||||
|
||||
## 获取 token
|
||||
|
||||
### 获取管理员用户 token
|
||||
|
||||
**拥有的权限**
|
||||
|
||||
此Token拥有 ClusterAdmin 的权限,可以执行所有操作
|
||||
|
||||
```bash
|
||||
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')
|
||||
```
|
||||
|
||||
执行完该命令后,可获得类似如下的输出:
|
||||
|
||||
```
|
||||
Name: admin-user-token-g8hxb
|
||||
Namespace: kube-system
|
||||
Labels: <none>
|
||||
Annotations: [kubernetes.io/service-account.name](http://kubernetes.io/service-account.name): kuboard-user
|
||||
[kubernetes.io/service-account.uid](http://kubernetes.io/service-account.uid): 948bb5e6-8cdc-11e9-b67e-fa163e5f7a0f
|
||||
|
||||
Type: [kubernetes.io/service-account-token](http://kubernetes.io/service-account-token)
|
||||
|
||||
Data
|
||||
====
|
||||
ca.crt: 1025 bytes
|
||||
namespace: 11 bytes
|
||||
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w
|
||||
```
|
||||
|
||||
|
||||
### 获取只读用户的Token
|
||||
|
||||
**拥有的权限**
|
||||
|
||||
- view 可查看名称空间的内容
|
||||
- system:node 可查看节点信息
|
||||
- system:persistent-volume-provisioner 可查看存储类和存储卷声明的信息
|
||||
|
||||
**适用场景**
|
||||
|
||||
只读用户不能对集群的配置执行修改操作,非常适用于将开发环境中的 kuboard 只读权限分发给开发者,以便开发者可以便捷地诊断问题
|
||||
|
||||
执行如下命令可以获得 <span style="color: #F56C6C; font-weight: 500;">只读用户</span> 的 Token
|
||||
|
||||
```bash
|
||||
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}')
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 访问 Kuboard
|
||||
|
||||
### 通过域名访问
|
||||
|
||||
在浏览器打开链接 http://kuboard.yourclustername.yourdomain.com (使用前面已修改的域名)
|
||||
|
||||
输入前一步骤中获得的 token,可进入控制台界面
|
||||
|
||||
### 通过 NodePort 访问
|
||||
|
||||
kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;您可以按如下方式访问 kuboard
|
||||
|
||||
```
|
||||
http://any-of-your-node-ip:32567/
|
||||
```
|
||||
|
||||
> 您也可以修改 kuboard.yaml 文件,使用自己定义的 NodePort 端口号
|
||||
|
||||
|
||||
|
||||
BIN
install/install-k8s.assets/image-20190715101542756.png
Normal file
|
After Width: | Height: | Size: 342 KiB |
BIN
install/install-k8s.assets/image-20190715113001203.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
install/install-k8s.assets/image-20190715193838012.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
install/install-k8s.assets/image-20190718175957160.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
416
install/install-k8s.md
Normal file
@ -0,0 +1,416 @@
|
||||
# 安装 Kubernetes 用于测试
|
||||
|
||||
如果您想拥有一个供个人学习测试使用的 kubernetes 集群,推荐的做法是在阿里云采购如下配置:
|
||||
|
||||
* 3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large,或同等配置)
|
||||
* 100G EFS
|
||||
|
||||
Kuboard 的在线 demo 环境使用的是如下拓扑结构,本文档描述了如何在阿里云完成该 demo 环境的搭建。(推荐阿里云是因为,阿里云是当下技术爱好者最容易接触到的云环境,拥有一个3节点 Kubernetes 集群,每天的成本不超过12元,且,停机状态下不收费,非常适合于技术爱好者学习时使用。)
|
||||
|
||||
[领取阿里云最高2000元红包](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg)
|
||||
|
||||
[Kuboard 在线体验](http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi02djZiZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjhiYTU3YmI1LWFiMTctNDM1NS1hNTM0LTQ0Njk4NGY0NzFlZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.DcXNIp0RKha1zkV4ga_QlGfcvMLGx2LOyzX-0VeboC3FojKFhxnfBeoda-zTeh6ugJlSM4kQYrRcof1Kx8Mg3-UgofNmgRySbDEVKtJZyMUoHqLmySKUIn8sbX8q83RNcqwcvY-fM8-w8HSuzU7Td7WWNuZrlCL4q_LQDYIBet1nlQ83YsENKNE8rsZQFDw8YM0MH6BEZLdwyhaboy_jjYbsU7kv8gks3aIX4lh1Fs9ZFQpC_6B0_MZvb7rEeG2M8QWXoUkDoL5JCKu6Wot5GlWf0kDMxIsViggP0NmSDTKh6kIvCkT2FZ2I4guEcjE_EjBpdOS6Abta22tzLlPKhg)
|
||||
为保证环境的稳定性,在线 Demo 中只提供只读权限。<span style="color: #F56C6C; font-weight: 500;">(请在PC浏览器中打开)</span>
|
||||
|
||||

|
||||
|
||||
|
||||
## 制作标准机镜像
|
||||
|
||||
通过使用标准机镜像,可以
|
||||
|
||||
- **避免重复执行对测试机安装必要软件的过程**
|
||||
- **以一种相对标准化的过程管理测试机的维护**
|
||||
|
||||
标准机镜像中预装了如下内容:
|
||||
|
||||
- docker
|
||||
- gitlab-runner
|
||||
- kubernetes images
|
||||
|
||||
本文档描述的安装过程已基于 centos 7.6 验证
|
||||
|
||||
标准机镜像的制作过程描述如下:
|
||||
|
||||
### 安装docker
|
||||
|
||||
**卸载旧版本**
|
||||
|
||||
```bash
|
||||
sudo yum remove docker \
|
||||
docker-client \
|
||||
docker-client-latest \
|
||||
docker-common \
|
||||
docker-latest \
|
||||
docker-latest-logrotate \
|
||||
docker-logrotate \
|
||||
docker-selinux \
|
||||
docker-engine-selinux \
|
||||
docker-engine
|
||||
```
|
||||
|
||||
**下载依赖包及安装包**
|
||||
|
||||
```bash
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
```
|
||||
|
||||
**安装**
|
||||
|
||||
```bash
|
||||
sudo yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
**启动 docker 服务**
|
||||
|
||||
```bash
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
**检查 docker 版本**
|
||||
|
||||
```bash
|
||||
docker version
|
||||
```
|
||||
|
||||
|
||||
|
||||
**参考文档**
|
||||
|
||||
https://docs.docker.com/install/linux/docker-ce/centos/
|
||||
|
||||
https://docs.docker.com/install/linux/linux-postinstall/
|
||||
|
||||
|
||||
|
||||
### 安装 nfs-utils
|
||||
|
||||
**执行安装命令**
|
||||
|
||||
```bash
|
||||
sudo yum install nfs-utils
|
||||
```
|
||||
|
||||
必须先安装 nfs-utils 才能挂载 nfs 网络存储
|
||||
|
||||
|
||||
|
||||
### K8S基本配置
|
||||
|
||||
**配置K8S的yum源**
|
||||
|
||||
```bash
|
||||
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
repo_gpgcheck=0
|
||||
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
|
||||
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
```
|
||||
|
||||
**关闭swap、防火墙**
|
||||
|
||||
```bash
|
||||
swapoff -a
|
||||
```
|
||||
|
||||
**关闭SeLinux**
|
||||
|
||||
```bash
|
||||
setenforce 0
|
||||
```
|
||||
|
||||
**修改 /etc/sysctl.conf**
|
||||
|
||||
```vim /etc/sysctl.conf```
|
||||
|
||||
向其中添加
|
||||
|
||||
```
|
||||
net.ipv4.ip_forward = 1
|
||||
net.bridge.bridge-nf-call-ip6tables = 1
|
||||
net.bridge.bridge-nf-call-iptables = 1
|
||||
```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**安装kubelet、kubeadm、kubectl**
|
||||
|
||||
```bash
|
||||
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
|
||||
```
|
||||
|
||||
|
||||
|
||||
**修改docker Cgroup Driver为systemd**
|
||||
|
||||
```vim /usr/lib/systemd/system/docker.service```
|
||||
|
||||
向其中他添加
|
||||
|
||||
```--exec-opt native.cgroupdriver=systemd```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
重启 docker
|
||||
|
||||
```
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
|
||||
|
||||
**启动kubelet**
|
||||
|
||||
```bash
|
||||
systemctl enable kubelet && systemctl start kubelet
|
||||
```
|
||||
|
||||
|
||||
|
||||
**加载 kubernetes 镜像**
|
||||
|
||||
由于k8s服务相关镜像在国外镜像源,国内无法访问
|
||||
|
||||
执行以下命令添加docker k8s国内镜像源
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
|
||||
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
**拉取k8s相关镜像**
|
||||
|
||||
```bash
|
||||
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
|
||||
docker pull mirrorgooglecontainers/pause:3.1
|
||||
docker pull mirrorgooglecontainers/etcd:3.3.10
|
||||
docker pull coredns/coredns:1.3.1
|
||||
```
|
||||
|
||||
**更改镜像名为k8s官网镜像**
|
||||
|
||||
```bash
|
||||
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
|
||||
docker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0
|
||||
docker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0
|
||||
docker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0
|
||||
docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
|
||||
docker tag eb516548c180 k8s.gcr.io/coredns:1.3.1
|
||||
docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10
|
||||
```
|
||||
|
||||
|
||||
|
||||
**制作镜像**
|
||||
|
||||
请参考阿里云基于ECS [制作虚拟机镜像](https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV) 的文档
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 初始化 master 节点
|
||||
|
||||
### 在 demo-master-a-1 机器上执行
|
||||
|
||||
以下命令以 root 身份执行
|
||||
|
||||
**配置 apiserver.demo 的域名**
|
||||
|
||||
```bash
|
||||
echo "x.x.x.x apiserver.demo" >> /etc/hosts
|
||||
```
|
||||
|
||||
> 请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址
|
||||
|
||||
|
||||
|
||||
**创建 /root/k8s/kubeadm-config.yaml**
|
||||
|
||||
```yaml
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.15.0
|
||||
controlPlaneEndpoint: "apiserver.demo:6443"
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
**初始化 apiserver**
|
||||
|
||||
```bash
|
||||
kubeadm init --config=kubeadm-config.yaml --upload-certs
|
||||
```
|
||||
|
||||
执行结果如下图所示:
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**初始化 root 用户的 kubectl 配置**
|
||||
|
||||
```bash
|
||||
rm -rf /root/.kube/
|
||||
mkdir /root/.kube/
|
||||
cp -i /etc/kubernetes/admin.conf /root/.kube/config
|
||||
```
|
||||
|
||||
|
||||
|
||||
**安装 calico**
|
||||
|
||||
(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)
|
||||
|
||||
```bash
|
||||
kubectl apply -f \
|
||||
https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
|
||||
```
|
||||
|
||||
> 安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/
|
||||
|
||||
|
||||
|
||||
**等待calico安装就绪:**
|
||||
|
||||
执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态
|
||||
|
||||
```bash
|
||||
watch kubectl get pod -n kube-system
|
||||
```
|
||||
|
||||
|
||||
### 检查 apiserver初始化结果
|
||||
|
||||
在第一个master节点 demo-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 初始化 worker节点
|
||||
|
||||
### 获得 join命令参数
|
||||
|
||||
**在 master 节点 demo-master-a-1 节点执行**
|
||||
|
||||
```bash
|
||||
kubeadm token create --print-join-command
|
||||
```
|
||||
|
||||
可获取kubeadm join 命令及参数,如下所示
|
||||
|
||||
```bash
|
||||
kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 初始化worker
|
||||
|
||||
**针对所有的 worker 节点执行**
|
||||
|
||||
```bash
|
||||
echo "x.x.x.x apiserver.demo" >> /etc/hosts
|
||||
kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
|
||||
```
|
||||
|
||||
> * 将 x.x.x.x 替换为 loader balancer 的实际 ip
|
||||
>
|
||||
> * 将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数
|
||||
|
||||
|
||||
|
||||
### 检查 apiserver初始化结果
|
||||
|
||||
在第一个master节点 demo-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
## 移除 worker 节点
|
||||
|
||||
> 正常情况下,您无需移除 worker 节点
|
||||
|
||||
在准备移除的 worker 节点上执行
|
||||
|
||||
```bash
|
||||
kubeadm reset
|
||||
```
|
||||
|
||||
在第一个 master 节点 demo-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
kubectl delete node demo-worker-x-x
|
||||
```
|
||||
|
||||
> * 将 demo-worker-x-x 替换为要移除的 worker 节点的名字
|
||||
> * worker 节点的名字可以通过在第一个 master 节点 demo-master-a-1 上执行 kubectl get nodes 命令获得
|
||||
|
||||
|
||||
|
||||
## 安装 Ingress Controller
|
||||
|
||||
> ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
>
|
||||
> Ingress Controllers官网介绍:[https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)
|
||||
>
|
||||
> 本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge
|
||||
>
|
||||
> kubernetes支持多种Ingress Controllers,本文推荐使用
|
||||
>
|
||||
> https://github.com/nginxinc/kubernetes-ingress
|
||||
|
||||
|
||||
|
||||
### 在 demo-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 配置域名解析
|
||||
|
||||
将域名 *.demo.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z
|
||||
|
||||
|
||||
|
||||
### 验证配置
|
||||
|
||||
在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面
|
||||
|
||||
BIN
install/install-kind.assets/1563696697515.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
install/install-kind.assets/1563697653048.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
install/install-kind.assets/1563697667480.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
install/install-kind.assets/1563698644736.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
install/install-kind.assets/1563698714557.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
install/install-kind.assets/1563698865448.png
Normal file
|
After Width: | Height: | Size: 83 KiB |
146
install/install-kind.md
Normal file
@ -0,0 +1,146 @@
|
||||
# 在单机使用 kind 安装 Kubernetes
|
||||
|
||||
本文旨在通过使用 kind 搭建本地 k8s 集群环境,为技术爱好者提供快速上手 Kuboard 的基本实践方式。
|
||||
|
||||
## 环境简介
|
||||
|
||||
本地搭建 k8s 集群需要 kind 工具及 docker 环境。
|
||||
|
||||
建议硬件配置:2核 cpu,8G 内存
|
||||
|
||||
ps: 以下均为在 Linux 平台实践,其他平台可参考文章中链接。
|
||||
|
||||
### kind 简介与安装
|
||||
kind:https://kind.sigs.k8s.io/ 是一个使用 Docker 容器运行本地 Kubernetes 集群的工具。
|
||||
ps:本文使用kind V0.4.0
|
||||
|
||||
安装:
|
||||
|
||||
- linux:
|
||||
|
||||
```bash
|
||||
curl -Lo ./kind-linux-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-linux-amd64
|
||||
chmod +x ./kind-linux-amd64
|
||||
mv ./kind-linux-amd64 /usr/local/bin/kind
|
||||
```
|
||||
|
||||
- win:
|
||||
|
||||
```powershell
|
||||
curl.exe -Lo kind-windows-amd64.exe https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-windows-amd64
|
||||
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
|
||||
```
|
||||
|
||||
- mac:
|
||||
|
||||
```bash
|
||||
curl -Lo ./kind-darwin-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-darwin-amd64
|
||||
chmod +x ./kind-darwin-amd64
|
||||
mv ./kind-darwin-amd64 /usr/local/bin/kind
|
||||
```
|
||||
|
||||
### docker 环境
|
||||
|
||||
Kind 的主要功能目前需要有 Docker 环境的支持,可参考 Docker 官方文档:https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.docker.com%2Finstall%2F 进行安装。
|
||||
|
||||
### kubectl 安装
|
||||
|
||||
kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/ 是 Kubernetes 命令行工具,可以在 Kubernetes 上部署和管理应用程序
|
||||
|
||||
Linux:
|
||||
|
||||
```
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl
|
||||
chmod +x ./kubectl
|
||||
sudo mv ./kubectl /usr/local/bin/kubectl
|
||||
```
|
||||
|
||||
ps: 由于网络问题多次尝试可下载成功
|
||||
|
||||
## k8s 集群搭建
|
||||
|
||||
### 准备 kind 搭建集群配置文件 kind-config.yaml
|
||||
|
||||
```yaml
|
||||
kind: Cluster
|
||||
apiVersion: kind.sigs.k8s.io/v1alpha3
|
||||
nodes:
|
||||
- role: control-plane
|
||||
- role: worker
|
||||
```
|
||||
|
||||
### 使用 kind 搭建集群
|
||||
|
||||
```
|
||||
kind create cluster --config kind-config.yaml
|
||||
```
|
||||
|
||||
### 创建成功
|
||||
|
||||

|
||||
|
||||
按照提示配置环境变量
|
||||
|
||||
```
|
||||
export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
|
||||
```
|
||||
|
||||
查看集群信息
|
||||
|
||||
```
|
||||
kubectl cluster-info
|
||||
```
|
||||
|
||||

|
||||
|
||||
## kuboard 安装
|
||||
|
||||
官方安装地址:http://kuboard.cn/#/install/install-dashboard
|
||||
|
||||
### 获取并修改 yaml 文件
|
||||
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml
|
||||
```
|
||||
|
||||
修改文件 kuboard.yaml 中 Ingress 的 host 为空
|
||||
|
||||
### 执行安装
|
||||
|
||||
```bash
|
||||
kubectl apply -f kuboard.yaml
|
||||
```
|
||||
|
||||
### 查看启动状态
|
||||
|
||||
```
|
||||
kubectl get pods -n kube-system --watch
|
||||
```
|
||||
|
||||
等待 kuboard 启动成功
|
||||
|
||||
### 访问 kuboard 页面
|
||||
|
||||
待启动成功后,需要做 80 端口转发,通过浏览器访问 kuboard
|
||||
|
||||
```
|
||||
kubectl port-forward service/kuboard 9080:80 -n kube-system
|
||||
```
|
||||
|
||||
获取登录 token
|
||||
|
||||
```bash
|
||||
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')
|
||||
```
|
||||
|
||||

|
||||
|
||||
浏览器中访问 http://localhost:9080
|
||||
|
||||

|
||||
|
||||
将获取的 token 复制到浏览器中,访问成功
|
||||
|
||||

|
||||
|
||||
|
||||
BIN
install/install-kubernetes.assets/image-20190713075717350.png
Normal file
|
After Width: | Height: | Size: 140 KiB |
BIN
install/install-kubernetes.assets/image2019-6-10_15-36-29.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
install/install-kubernetes.assets/image2019-6-10_15-55-41.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
489
install/install-kubernetes.md
Normal file
@ -0,0 +1,489 @@
|
||||
# 安装 Kubernetes
|
||||
|
||||
# 介绍
|
||||
|
||||
kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:
|
||||
|
||||
* 使用 kubernetes 1.15.0
|
||||
* 三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡
|
||||
* 多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡
|
||||
* 使用 calico 作为网络插件
|
||||
* 使用 nginx-ingress 作为 kubernetes ingress controller
|
||||
|
||||
[领取阿里云最高2000元红包](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg)
|
||||
|
||||
下图为 kubernetes 安装的拓扑图
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
* 标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image
|
||||
* 跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机
|
||||
* NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射
|
||||
* Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的
|
||||
|
||||
|
||||
|
||||
# 安装步骤
|
||||
|
||||
|
||||
## 制作标准机镜像
|
||||
|
||||
通过使用标准机镜像,可以
|
||||
|
||||
- **避免重复执行对测试机安装必要软件的过程**
|
||||
- **以一种相对标准化的过程管理测试机的维护**
|
||||
|
||||
标准机镜像中预装了如下内容:
|
||||
|
||||
- docker
|
||||
- gitlab-runner
|
||||
- kubernetes images
|
||||
|
||||
本文档描述的安装过程已基于 centos 7.6 验证
|
||||
|
||||
标准机镜像的制作过程描述如下:
|
||||
|
||||
### 安装docker
|
||||
|
||||
**卸载旧版本**
|
||||
|
||||
```bash
|
||||
sudo yum remove docker \
|
||||
docker-client \
|
||||
docker-client-latest \
|
||||
docker-common \
|
||||
docker-latest \
|
||||
docker-latest-logrotate \
|
||||
docker-logrotate \
|
||||
docker-selinux \
|
||||
docker-engine-selinux \
|
||||
docker-engine
|
||||
```
|
||||
|
||||
**下载依赖包及安装包**
|
||||
|
||||
```bash
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
|
||||
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
```
|
||||
|
||||
**安装**
|
||||
|
||||
```bash
|
||||
sudo yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm
|
||||
sudo yum install -y docker-ce-18.09.7-3.el7.x86_64.rpm
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
**启动 docker 服务**
|
||||
|
||||
```bash
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
**检查 docker 版本**
|
||||
|
||||
```bash
|
||||
docker version
|
||||
```
|
||||
|
||||
|
||||
|
||||
**参考文档**
|
||||
|
||||
https://docs.docker.com/install/linux/docker-ce/centos/
|
||||
|
||||
https://docs.docker.com/install/linux/linux-postinstall/
|
||||
|
||||
|
||||
|
||||
### 安装 nfs-utils
|
||||
|
||||
**执行安装命令**
|
||||
|
||||
```bash
|
||||
sudo yum install nfs-utils
|
||||
```
|
||||
|
||||
必须先安装 nfs-utils 才能挂载 nfs 网络存储
|
||||
|
||||
|
||||
|
||||
### K8S基本配置
|
||||
|
||||
**配置K8S的yum源**
|
||||
|
||||
```bash
|
||||
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
|
||||
[kubernetes]
|
||||
name=Kubernetes
|
||||
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
|
||||
enabled=1
|
||||
gpgcheck=0
|
||||
repo_gpgcheck=0
|
||||
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
|
||||
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
|
||||
EOF
|
||||
```
|
||||
|
||||
**关闭swap、防火墙**
|
||||
|
||||
```bash
|
||||
swapoff -a
|
||||
```
|
||||
|
||||
**关闭SeLinux**
|
||||
|
||||
```bash
|
||||
setenforce 0
|
||||
```
|
||||
|
||||
**修改 /etc/sysctl.conf**
|
||||
|
||||
```vim /etc/sysctl.conf```
|
||||
|
||||
向其中添加
|
||||
|
||||
```
|
||||
net.ipv4.ip_forward = 1
|
||||
net.bridge.bridge-nf-call-ip6tables = 1
|
||||
net.bridge.bridge-nf-call-iptables = 1
|
||||
```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
**安装kubelet、kubeadm、kubectl**
|
||||
|
||||
```bash
|
||||
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
|
||||
```
|
||||
|
||||
|
||||
|
||||
**修改docker Cgroup Driver为systemd**
|
||||
|
||||
```vim /usr/lib/systemd/system/docker.service```
|
||||
|
||||
向其中他添加
|
||||
|
||||
```--exec-opt native.cgroupdriver=systemd```
|
||||
|
||||
如下图所示
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
重启 docker
|
||||
|
||||
```
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
|
||||
|
||||
**启动kubelet**
|
||||
|
||||
```bash
|
||||
systemctl enable kubelet && systemctl start kubelet
|
||||
```
|
||||
|
||||
|
||||
|
||||
**加载 kubernetes 镜像**
|
||||
|
||||
由于k8s服务相关镜像在国外镜像源,国内无法访问
|
||||
|
||||
执行以下命令添加docker k8s国内镜像源
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
|
||||
|
||||
systemctl restart docker
|
||||
```
|
||||
|
||||
**拉取k8s相关镜像**
|
||||
|
||||
```bash
|
||||
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
|
||||
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
|
||||
docker pull mirrorgooglecontainers/pause:3.1
|
||||
docker pull mirrorgooglecontainers/etcd:3.3.10
|
||||
docker pull coredns/coredns:1.3.1
|
||||
```
|
||||
|
||||
**更改镜像名为k8s官网镜像**
|
||||
|
||||
```bash
|
||||
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
|
||||
docker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0
|
||||
docker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0
|
||||
docker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0
|
||||
docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
|
||||
docker tag eb516548c180 k8s.gcr.io/coredns:1.3.1
|
||||
docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10
|
||||
```
|
||||
|
||||
|
||||
|
||||
**制作镜像**
|
||||
|
||||
请参考阿里云基于ECS [制作虚拟机镜像](https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV) 的文档
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 初始化API Server
|
||||
|
||||
### 创建 ApiServer 的 ELB(私网)
|
||||
|
||||
监听端口:6443 / TCP
|
||||
|
||||
后端资源组:包含 apple-master-a-1, apple-master-b-1, apple-master-b-2
|
||||
|
||||
后端端口:6443
|
||||
|
||||
开启 按源地址保持会话
|
||||
|
||||
假设完成创建以后,ELB的 ip 地址为 x.x.x.x
|
||||
|
||||
### 初始化第一个master节点
|
||||
|
||||
在 apple-master-a-1机器上执行
|
||||
|
||||
**配置 apiserver.apple 的域名**
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
echo "x.x.x.x apiserver.apple" >> /etc/hosts
|
||||
```
|
||||
|
||||
> 请替换其中的 x.x.x.x 为您的负载均衡服务器的实际 ip 地址
|
||||
|
||||
|
||||
|
||||
**创建 /root/k8s/kubeadm-config.yaml**
|
||||
|
||||
```yaml
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.14.3
|
||||
controlPlaneEndpoint: "apiserver.apple:6443"
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
**初始化 apiserver**
|
||||
|
||||
```bash
|
||||
kubeadm init --config=/root/k8s/kubeadm-config.yaml --upload-certs
|
||||
|
||||
```
|
||||
|
||||
执行结果如下图所示:
|
||||
|
||||

|
||||
|
||||
**初始化 gitlab-runner 用户的 kubectl 配置**
|
||||
|
||||
```bash
|
||||
rm -rf /home/gitlab-runner/.kube/
|
||||
mkdir /home/gitlab-runner/.kube/
|
||||
cp -i /etc/kubernetes/admin.conf /home/gitlab-runner/.kube/config
|
||||
chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/.kube
|
||||
```
|
||||
|
||||
|
||||
|
||||
**安装 calico**
|
||||
|
||||
(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)
|
||||
|
||||
```bash
|
||||
su - gitlab-runner
|
||||
kubectl apply -f \
|
||||
https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
|
||||
```
|
||||
|
||||
> 安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/
|
||||
|
||||
|
||||
|
||||
**等待calico安装就绪:**
|
||||
|
||||
执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态
|
||||
|
||||
```sh
|
||||
watch kubectl get pod -n kube-system
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 初始化第二、三个master节点
|
||||
|
||||
在 apple-master-b-1 和 apple-master-b-2 机器上执行
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
echo "x.x.x.x apiserver.apple" >> /etc/hosts
|
||||
```
|
||||
|
||||
|
||||
|
||||
执行 (以下命令行在初始化 apple-master-a-1 时,被打印在控制台上,执行时应该使用控制台打印出的命令参数)
|
||||
|
||||
```bash
|
||||
kubeadm join apiserver.apple:6443 --token ejwx62.vqwog6il5p83uk7y \
|
||||
--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 \
|
||||
--experimental-control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 检查 apiserver初始化结果
|
||||
|
||||
在第一个master节点 apple-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
su - gitlab-runner
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 初始化 worker节点
|
||||
|
||||
### 获得 join命令参数
|
||||
|
||||
**在第一个master节点 apple-master-a-1 节点执行**
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
kubeadm token create --print-join-command
|
||||
```
|
||||
|
||||
可获取kubeadm join 命令及参数,如下所示
|
||||
|
||||
```bash
|
||||
kubeadm join apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 初始化worker
|
||||
|
||||
**针对所有的 worker 节点执行**
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
echo "x.x.x.x apiserver.apple" >> /etc/hosts
|
||||
kubeadm join apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
|
||||
```
|
||||
|
||||
> * 将 x.x.x.x 替换为 loader balancer 的实际 ip
|
||||
>
|
||||
> * 将 kubeadm join 命令后的参数替换为上一个步骤中实际从 apple-master-a-1 节点获得的参数
|
||||
|
||||
|
||||
|
||||
### 检查 apiserver初始化结果
|
||||
|
||||
在第一个master节点 apple-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
su - gitlab-runner
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 移除 worker 节点
|
||||
|
||||
> 正常情况下,您无需移除 worker 节点
|
||||
|
||||
在准备移除的 worker 节点上执行
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
kubeadm reset
|
||||
```
|
||||
|
||||
在第一个 master 节点 apple-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
sudo -i
|
||||
su - gitlab-runner
|
||||
kubectl delete node apple-worker-x-x
|
||||
```
|
||||
|
||||
> * 将 apple-worker-x-x 替换为要移除的 worker 节点的名字
|
||||
> * worker 节点的名字可以通过在第一个 master 节点 apple-master-a-1 上执行 kubectl get nodes 命令获得
|
||||
|
||||
|
||||
|
||||
## 安装 Ingress Controller
|
||||
|
||||
> ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/
|
||||
>
|
||||
> Ingress Controllers官网介绍:[https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/)
|
||||
>
|
||||
> 本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge
|
||||
>
|
||||
> kubernetes支持多种Ingress Controllers,本文推荐使用
|
||||
>
|
||||
> https://github.com/nginxinc/kubernetes-ingress
|
||||
|
||||
|
||||
|
||||
### 在 apple-master-a-1 上执行
|
||||
|
||||
```bash
|
||||
su - gitlab-runner
|
||||
kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 在IaaS云控制台完成如下配置(**公网ELB**)
|
||||
|
||||
创建负载均衡 ELB:
|
||||
|
||||
监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持
|
||||
|
||||
服务器资源池 1: apple-worker-x-x 的所有节点的 80端口
|
||||
|
||||
监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持
|
||||
|
||||
服务器资源池 2: apple-worker-x-x 的所有节点的443端口
|
||||
|
||||
假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z
|
||||
|
||||
|
||||
|
||||
### 配置域名解析
|
||||
|
||||
将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z
|
||||
|
||||
|
||||
|
||||
### 验证配置
|
||||
|
||||
在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面
|
||||
|
||||