This commit is contained in:
huanqing.shao
2019-07-25 06:22:52 +08:00
parent 97d19726a4
commit 493e4272d7
622 changed files with 3007 additions and 7 deletions

15
install/README.md Normal file
View 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>
**在线提问**
![Kuboard 兴趣群二维码](./../overview/README.assets/kuboard_qq.png)

View 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
监听器 180 / TCP SOURCE_ADDRESS 会话保持
服务器资源池 1 apple-worker-x-x 的所有节点的 80端口
监听器 2443 / 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 错误页面

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View 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
```
如下图所示
![image-20190715085036593](./install-common-vm.assets/image-20190715085036593.png ':size=600x445')
**安装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```
如下图所示
![屏幕快照 2019-07-15 09.01.21](./install-common-vm.assets/image2019-07-15_09.01.21.png ':size=1000x326')
重启 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) 的文档

View 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 安装方式**
> * 部分用户使用二进制包的形式安装 KubernetesKuboard 现在的版本不能在这类 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 端口号

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

416
install/install-k8s.md Normal file
View 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>
![image-20190718175957160](./install-k8s.assets/image-20190718175957160.png)
## 制作标准机镜像
通过使用标准机镜像,可以
- **避免重复执行对测试机安装必要软件的过程**
- **以一种相对标准化的过程管理测试机的维护**
标准机镜像中预装了如下内容:
- 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
```
如下图所示
![image-20190715085036593](./install-common-vm.assets/image-20190715085036593.png ':size=600x445')
**安装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```
如下图所示
![屏幕快照 2019-07-15 09.01.21](./install-common-vm.assets/image2019-07-15_09.01.21.png ':size=1000x326')
重启 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
```
执行结果如下图所示:
![image-20190715101542756](./install-k8s.assets/image-20190715101542756.png ':size=800x388')
**初始化 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
```
![image-20190715193838012](./install-k8s.assets/image-20190715193838012.png)
## 移除 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 错误页面

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

146
install/install-kind.md Normal file
View File

@ -0,0 +1,146 @@
# 在单机使用 kind 安装 Kubernetes
本文旨在通过使用 kind 搭建本地 k8s 集群环境,为技术爱好者提供快速上手 Kuboard 的基本实践方式。
## 环境简介
本地搭建 k8s 集群需要 kind 工具及 docker 环境。
建议硬件配置2核 cpu8G 内存
ps: 以下均为在 Linux 平台实践,其他平台可参考文章中链接。
### kind 简介与安装
kindhttps://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
```
### 创建成功
![1563696697515](./install-kind.assets/1563696697515.png)
按照提示配置环境变量
```
export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
```
查看集群信息
```
kubectl cluster-info
```
![1563697667480](./install-kind.assets/1563697667480.png)
## 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}')
```
![1563698644736](./install-kind.assets/1563698644736.png)
浏览器中访问 http://localhost:9080
![1563698714557](./install-kind.assets/1563698714557.png)
将获取的 token 复制到浏览器中,访问成功
![1563698865448](./install-kind.assets/1563698865448.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View 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 安装的拓扑图
![image-20190713075717350](./install-kubernetes.assets/image-20190713075717350.png)
* 标准机用于制作 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
```
如下图所示
![image-20190715085036593](./install-common-vm.assets/image-20190715085036593.png ':size=600x445')
**安装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```
如下图所示
![屏幕快照 2019-07-15 09.01.21](./install-common-vm.assets/image2019-07-15_09.01.21.png ':size=1000x326')
重启 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
```
执行结果如下图所示:
![image2019-6-10_15-36-29](./install-kubernetes.assets/image2019-6-10_15-36-29.png)
**初始化 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
监听器 180 / TCP SOURCE_ADDRESS 会话保持
服务器资源池 1 apple-worker-x-x 的所有节点的 80端口
监听器 2443 / 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 错误页面