docs update

pull/1215/head
gjmzj 2022-12-19 11:46:23 +08:00
parent db98229cae
commit 37b07e9bcc
13 changed files with 49 additions and 153 deletions

View File

@ -55,7 +55,7 @@ epoch timestamp cluster status node.total node.data shards pri relo i
- 3.安装 elasticsearch chart
``` bash
$ cd /etc/ansible/manifests/es-cluster
$ cd /etc/kubeasz/manifests/es-cluster
# 如果你的helm安装没有启用tls证书请忽略以下--tls参数
$ helm install --tls --name es-cluster --namespace elastic -f es-values.yaml elasticsearch
```
@ -84,7 +84,7 @@ $ curl $NODE_IP:29200/_cat/health
$ curl $NODE_IP:29200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
root@k8s401:/etc/ansible# curl 10.100.97.41:29200/_cat/nodes?
root@k8s401:/etc/kubeasz# curl 10.100.97.41:29200/_cat/nodes?
172.31.2.4 27 80 5 0.09 0.11 0.21 mi - es-cluster-elasticsearch-master-0
172.31.1.7 30 97 3 0.39 0.29 0.27 i - es-cluster-elasticsearch-client-778df74c8f-skh8l
172.31.3.7 20 97 3 0.11 0.17 0.18 i - es-cluster-elasticsearch-client-778df74c8f-7fj4k

View File

@ -14,7 +14,7 @@ Mariadb 是从 MySQL 衍生出来的开源关系型数据库,目前兼容 mysq
按照惯例,直接把 chart 下载到本地,然后把配置复制 values.yaml 出来进行修改,这样方便以后整体更新 chart安装实际使用需要修改配置文件
``` bash
$ cd /etc/ansible/manifests/mariadb-cluster
$ cd /etc/kubeasz/manifests/mariadb-cluster
# 编辑 my-values.yaml 修改以下部分
service:
@ -67,7 +67,7 @@ slave:
使用 helm 安装
``` bash
$ cd /etc/ansible/manifests/mariadb-cluster
$ cd /etc/kubeasz/manifests/mariadb-cluster
$ helm install --name mariadb --namespace default -f my-values.yaml ./mariadb
```

View File

@ -8,10 +8,10 @@
``` bash
# 部署dashboard 主yaml配置文件
$ kubectl create -f /etc/ansible/manifests/dashboard/1.6.3/kubernetes-dashboard.yaml
$ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/kubernetes-dashboard.yaml
# 部署基本密码认证配置[可选],密码文件位于 /etc/kubernetes/ssl/basic-auth.csv
$ kubectl create -f /etc/ansible/manifests/dashboard/1.6.3/ui-admin-rbac.yaml
$ kubectl create -f /etc/ansible/manifests/dashboard/1.6.3/ui-read-rbac.yaml
$ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/ui-admin-rbac.yaml
$ kubectl create -f /etc/kubeasz/manifests/dashboard/1.6.3/ui-read-rbac.yaml
```
请在另外窗口打开 [kubernetes-dashboard.yaml](../../manifests/dashboard/1.6.3/kubernetes-dashboard.yaml)

View File

@ -15,8 +15,8 @@
### 安装
``` bash
$ kubectl apply -f /etc/ansible/manifests/efk/
$ kubectl apply -f /etc/ansible/manifests/efk/es-without-pv/
$ kubectl apply -f /etc/kubeasz/manifests/efk/
$ kubectl apply -f /etc/kubeasz/manifests/efk/es-without-pv/
```
### 验证
@ -75,12 +75,12 @@ Kibana is running at https://192.168.1.10:8443/api/v1/namespaces/kube-system/ser
``` bash
# 如果之前已经安装了默认的EFK请用以下两个命令先删除它
$ kubectl delete -f /etc/ansible/manifests/efk/
$ kubectl delete -f /etc/ansible/manifests/efk/es-without-pv/
$ kubectl delete -f /etc/kubeasz/manifests/efk/
$ kubectl delete -f /etc/kubeasz/manifests/efk/es-without-pv/
# 安装静态PV 的 EFK
$ kubectl apply -f /etc/ansible/manifests/efk/
$ kubectl apply -f /etc/ansible/manifests/efk/es-static-pv/
$ kubectl apply -f /etc/kubeasz/manifests/efk/
$ kubectl apply -f /etc/kubeasz/manifests/efk/es-static-pv/
```
+ 目录`es-static-pv` 下首先是利用 NFS服务预定义了三个 PV资源然后在 `es-statefulset.yaml`定义中使用 `volumeClaimTemplates` 去匹配使用预定义的 PV资源注意 PV参数`accessModes` `storageClassName` `storage`容量大小必须两边匹配。
@ -138,13 +138,13 @@ es0 es1 es2
``` bash
# 如果之前已经安装了默认的EFK或者静态PV EFK请用以下命令先删除它
$ kubectl delete -f /etc/ansible/manifests/efk/
$ kubectl delete -f /etc/ansible/manifests/efk/es-without-pv/
$ kubectl delete -f /etc/ansible/manifests/efk/es-static-pv/
$ kubectl delete -f /etc/kubeasz/manifests/efk/
$ kubectl delete -f /etc/kubeasz/manifests/efk/es-without-pv/
$ kubectl delete -f /etc/kubeasz/manifests/efk/es-static-pv/
# 安装动态PV 的 EFK
$ kubectl apply -f /etc/ansible/manifests/efk/
$ kubectl apply -f /etc/ansible/manifests/efk/es-dynamic-pv/
$ kubectl apply -f /etc/kubeasz/manifests/efk/
$ kubectl apply -f /etc/kubeasz/manifests/efk/es-dynamic-pv/
```
+ 首先 `nfs-client-provisioner.yaml` 创建一个工作 POD它监听集群的 PVC请求并当 PVC请求来到时调用 `nfs-client` 去请求 `nfs-server`的存储资源,成功后即动态生成对应的 PV资源。
+ `nfs-dynamic-storageclass.yaml` 定义 NFS存储类型的类型名 `nfs-dynamic-class`,然后在 `es-statefulset.yaml`中必须使用这个类型名才能动态请求到资源。
@ -208,7 +208,7 @@ $ curl -X DELETE elasticsearch-logging:9200/logstash-xxxx.xx.xx
基于 alpine:3.8 创建镜像`es-index-rotator` [查看Dockerfile](../../dockerfiles/es-index-rotator/Dockerfile)然后创建一个cronjob去完成清理任务
```
$ kubectl apply -f /etc/ansible/manifests/efk/es-index-rotator/
$ kubectl apply -f /etc/kubeasz/manifests/efk/es-index-rotator/
```
#### 验证日志清理

View File

@ -1,54 +0,0 @@
# Helm
`Helm`致力于成为k8s集群的应用包管理工具希望像linux 系统的`RPM` `DPKG`那样成功确实在k8s上部署复杂一点的应用很麻烦需要管理很多yaml文件configmap,controller,service,rbac,pv,pvc等等而helm能够整齐管理这些文档版本控制参数化安装方便的打包与分享等。
- 建议积累一定k8s经验以后再去使用helm对于初学者来说手工去配置那些yaml文件对于快速学习k8s的设计理念和运行原理非常有帮助而不是直接去使用helm面对又一层封装与复杂度。
- 本文参考 helm 官网安全实践启用 TLS 认证,参考 https://docs.helm.sh/using_helm/#securing-your-helm-installation
## 安全安装 helm在线
以下步骤以 helm/tiller 版本 v2.14.1 为例在helm客户端和tiller服务器间建立安全的SSL/TLS认证机制tiller服务器和helm客户端都是使用同一CA签发的`client cert`,然后互相识别对方身份。建议通过本项目提供的`ansible role`安装符合官网上介绍的安全加固措施在ansible控制端运行:
``` bash
# 1.配置默认helm参数 vi /etc/ansible/roles/helm/defaults/main.yml
# 2.执行安装
$ ansible-playbook /etc/ansible/roles/helm/helm.yml
```
- 注意默认仅在第一个master节点初始化helm客户端如果需要在其他节点初始化helm客户端请修改 roles/helm/helm.yml 文件的 hosts 定义,然后再次执行`ansible-playbook /etc/ansible/roles/helm/helm.yml`即可
简单介绍下`/roles/helm/tasks/main.yml`中的步骤
- 1-下载最新release的helm客户端到/etc/ansible/bin目录下
- 2-由集群CA签发helm客户端证书和私钥
- 3-由集群CA签发tiller服务端证书和私钥
- 4-创建tiller专用的RBAC配置只允许helm在指定的namespace查看和安装应用
- 5-安全安装tiller到集群tiller服务启用tls验证
- 6-配置helm客户端使用tls方式与tiller服务端通讯
## 安全安装 helm离线
在内网环境中由于不能访问互联网无法连接repo地址使用上述的在线安装helm的方式会报错。因此需要使用离线安装的方法来安装。要注意的是tiller的镜像版本必须为v2.14.1,否则会不匹配。
离线安装步骤:
```bash
# 1.创建本地repo
mkdir -p /opt/helm-repo
# 2.启动helm repo server,如果要其他服务器访问改为本地IP
nohup helm serve --address 127.0.0.1:8879 --repo-path /opt/helm-repo &
# 3.更改helm 配置文件
将/etc/ansible/roles/helm/defaults/main.yml中repo的地址改为 http://127.0.0.1:8879
cat <<EOF >/etc/ansible/roles/helm/defaults/main.yml
helm_namespace: kube-system
helm_cert_cn: helm001
tiller_sa: tiller
tiller_cert_cn: tiller001
tiller_image: easzlab/tiller:v2.14.1
#repo_url: https://kubernetes-charts.storage.googleapis.com
repo_url: http://127.0.0.1:8879
history_max: 5
# 如果默认官方repo 网络访问不稳定可以使用如下的阿里云镜像repo
#repo_url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
EOF
# 4.运行安全helm命令
ansible-playbook /etc/ansible/roles/helm/helm.yml
```
## 使用helm安装应用到k8s上
请阅读本项目文档[helm安装prometheus监控](prometheus.md)

View File

@ -21,7 +21,7 @@ $ kubectl -n kube-system create secret tls traefik-cert --key=tls.key --cert=tls
## 3.创建 traefik-controller增加 traefik.toml 配置文件及https 端口暴露等,详见该 yaml 文件
``` bash
$ kubectl apply -f /etc/ansible/manifests/ingress/traefik/tls/traefik-controller.yaml
$ kubectl apply -f /etc/kubeasz/manifests/ingress/traefik/tls/traefik-controller.yaml
```
## 4.创建 https ingress 例子
@ -47,7 +47,7 @@ spec:
tls:
- secretName: traefik-cert
# 创建https ingress
$ kubectl apply -f /etc/ansible/manifests/ingress/traefik/tls/hello-tls.ing.yaml
$ kubectl apply -f /etc/kubeasz/manifests/ingress/traefik/tls/hello-tls.ing.yaml
# 注意根据hello示例需要在default命名空间创建对应的secret: traefik-cert
$ kubectl create secret tls traefik-cert --key=tls.key --cert=tls.crt
```
@ -78,9 +78,9 @@ https://hello.test.com:23457
$ kubectl get svc -n kube-system | grep dashboard
kubernetes-dashboard NodePort 10.68.211.168 <none> 443:39308/TCP 3d11h
```
前提2`/etc/ansible/manifests/ingress/traefik/tls/traefik-controller.yaml`的配置文件`traefik.toml`开启了`insecureSkipVerify = true`
前提2`/etc/kubeasz/manifests/ingress/traefik/tls/traefik-controller.yaml`的配置文件`traefik.toml`开启了`insecureSkipVerify = true`
配置 dashboard ingress`kubectl apply -f /etc/ansible/manifests/ingress/traefik/tls/k8s-dashboard.ing.yaml` 内容如下:
配置 dashboard ingress`kubectl apply -f /etc/kubeasz/manifests/ingress/traefik/tls/k8s-dashboard.ing.yaml` 内容如下:
```
apiVersion: networking.k8s.io/v1beta1

View File

@ -26,7 +26,7 @@ Traefik 提供了一个简单好用 `Ingress controller`,下文侧重讲解 in
#### 安装 traefik ingress-controller
``` bash
kubectl create -f /etc/ansible/manifests/ingress/traefik/traefik-ingress.yaml
kubectl create -f /etc/kubeasz/manifests/ingress/traefik/traefik-ingress.yaml
```
+ 注意需要配置 `RBAC`授权
+ 注意`trafik pod`中 `80`端口为 traefik ingress-controller的服务端口`8080`端口为 traefik 的管理WEB界面为后续配置方便指定`80` 端口暴露`NodePort`端口为 `23456`(对应于在hosts配置中`NODE_PORT_RANGE`范围内可用端口)
@ -58,7 +58,7 @@ test-hello 1 1 1 1 56s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-hello ClusterIP 10.68.124.115 <none> 80/TCP 1m
```
+ 然后为这个应用创建 ingress`kubectl create -f /etc/ansible/manifests/ingress/test-hello.ing.yaml`
+ 然后为这个应用创建 ingress`kubectl create -f /etc/kubeasz/manifests/ingress/test-hello.ing.yaml`
``` bash
# test-hello.ing.yaml内容
@ -81,7 +81,7 @@ spec:
#### 为 traefik WEB 管理页面创建 ingress 规则
`kubectl create -f /etc/ansible/manifests/ingress/traefik/traefik-ui.ing.yaml`
`kubectl create -f /etc/kubeasz/manifests/ingress/traefik/traefik-ui.ing.yaml`
``` bash
# traefik-ui.ing.yaml内容
@ -116,9 +116,9 @@ spec:
``` bash
# 修改traefik-ingress 使用 LoadBalancer服务
$ sed -i 's/NodePort$/LoadBalancer/g' /etc/ansible/manifests/ingress/traefik/traefik-ingress.yaml
$ sed -i 's/NodePort$/LoadBalancer/g' /etc/kubeasz/manifests/ingress/traefik/traefik-ingress.yaml
# 创建traefik-ingress
$ kubectl apply -f /etc/ansible/manifests/ingress/traefik/traefik-ingress.yaml
$ kubectl apply -f /etc/kubeasz/manifests/ingress/traefik/traefik-ingress.yaml
# 验证
$ kubectl get svc --all-namespaces |grep traefik
kube-system traefik-ingress-service LoadBalancer 10.68.163.243 192.168.1.241 80:23456/TCP,8080:37088/TCP 1m

View File

@ -23,7 +23,7 @@
```
helm install manifests/jenkins/ --name jenkins
```
如果通过/etc/ansible/roles/helm/helm.yml安装的helm安装过程会出现如下错误
如果通过/etc/kubeasz/roles/helm/helm.yml安装的helm安装过程会出现如下错误
``` bash
E0703 08:40:22.376225 19888 portforward.go:331] an error occurred forwarding 41655 -> 44134: error forwarding port 44134 to pod 5098414beaaa07140a4ba3240690b1ce989ece01e5db33db65eec83bd64bdedf, uid : exit status 1: 2018/07/03 08:40:22 socat[19991] E write(5, 0x1aec120, 3424): Connection reset by peer

View File

@ -15,7 +15,7 @@
- 3.安装 Log-Pilot
``` bash
kubectl apply -f /etc/ansible/manifests/efk/log-pilot/log-pilot-filebeat.yaml
kubectl apply -f /etc/kubeasz/manifests/efk/log-pilot/log-pilot-filebeat.yaml
```
- 4.创建示例应用,采集日志

View File

@ -1,24 +0,0 @@
# 修复kubelet默认允许匿名访问
kubelet默认启动参数`--anonymous-auth=true`风险非常大黑客可以在集群中植入挖坑程序甚至通过这个漏洞获取宿主系统root权限。感谢 `cqspirit` [PR #192](https://github.com/easzlab/kubeasz/pull/192) 提醒
## 关于漏洞的危害
据我所知k8s v1.5+ 所有版本的kubelet组件的默认启动参数是允许匿名访问kubelet的默认的大坑你可以使用如下命令检查你的集群
`curl -sk https://$NodeIP:10250/runningpods/`
- 如果返回了运行的pod信息说明是允许匿名访问的
- 如果返回`Unauthorized`,说明是安全的
部分关于该漏洞的讨论参考如下:
- [kubelet-exploit](https://github.com/kayrus/kubelet-exploit)
- [Kubernetes-From-Container-To-Cluster](https://raesene.github.io/blog/2016/10/08/Kubernetes-From-Container-To-Cluster/)
- [Analysis of a Kubernetes hack -- Backdooring through kubelet](https://www.reddit.com/r/netsec/comments/847994/analysis_of_a_kubernetes_hack_backdooring_through/)
## 漏洞的修复
最新代码已经修复,参考[官方文档说明](https://kubernetes.io/docs/admin/kubelet-authentication-authorization/)已有集群可以登录ansible控制端操作如下
``` bash
$ cd /etc/ansible
$ git pull origin master
$ ansible-playbook 22.upgrade.yml -t restart_master,restart_node
```

View File

@ -1,31 +0,0 @@
## 前言
`kubeasz`项目开始于`2017.11`从最开始单一的ansible部署脚本朝着提供部署高可用 K8S集群的完整解决方案的目标不断前进项目的发展需要各位的共同参与和贡献希望越做越好为国内k8s学习、实践者提供更多帮助。
现在是很好的时间节点,梳理项目的`TodoList`/`Milestones`,以下是现有的一些想法,欢迎大家在[这里](https://github.com/easzlab/kubeasz/issues/188)参与讨论。
### 项目 TodoList
<table border="0">
<tr>
<th>类型</th>
<th>描述</th>
<th>备注</th>
</tr>
<tr>
<td>基础服务</td>
<td>集群监控告警-prometheus</td>
<td>已完成基础,待优化</td>
</tr>
<tr>
<td>应用服务</td>
<td>服务治理-istio跟进</td>
<td></td>
</tr>
<tr>
<td>基础服务</td>
<td>ingress-nginx</td>
<td>待集成manifests及使用文档</td>
</tr>
</table>

View File

@ -2,11 +2,20 @@
集群升级存在一定风险,请谨慎操作。
- 在当前支持k8s大版本基础上升级任意小版本比如当前安装集群为1.19.0你可以方便的升级到任何1.19.x版本
- 支持k8s相同大版本基础上升级任意小版本比如当前安装集群为1.25.0你可以方便的升级到任何1.25.x版本
- 不建议跨大版本升级一般大版本更新时k8s api有一些变动
### 备份etcd数据
### 备份etcd数据
- 升级前对 etcd数据做备份在任意 etcd节点上执行
- 自动备份
`kubeasz`项目也可以如下方便执行备份假设集群名为k8s-01详情阅读文档[备份恢复](cluster_restore.md)
```
dk ezctl backup k8s-01
```
- 手动备份 etcd数据在任意 etcd节点上执行
``` bash
# snapshot备份
@ -15,16 +24,12 @@ $ ETCDCTL_API=3 etcdctl snapshot save backup.db
$ ETCDCTL_API=3 etcdctl --write-out=table snapshot status backup.db
```
`kubeasz`项目也可以如下方便执行备份假设集群名为k8s-01
### k8s 升级小版本
- `ezctl backup k8s-01`,详情阅读文档[备份恢复](cluster_restore.md)
快速升级`k8s`小版本,比较常见如`Bug修复` `特性发布`时使用。
### 快速k8s版本升级
快速升级是指只升级`k8s`版本,比较常见如`Bug修复` `重要特性发布`时使用。
- 首先去官网release下载待升级的k8s版本例如`https://dl.k8s.io/v1.11.5/kubernetes-server-linux-amd64.tar.gz`
- 解压下载的tar.gz文件找到如下`kube*`开头的二进制复制替换ansible控制端目录`/etc/ansible/bin`对应文件
- 首先去官网release下载待升级的k8s版本例如`https://dl.k8s.io/v1.25.4/kubernetes-server-linux-amd64.tar.gz`
- 解压下载的tar.gz文件找到如下`kube*`开头的二进制复制替换kubeasz控制端目录`/etc/kubeasz/bin`对应文件
- kube-apiserver
- kube-controller-manager
- kubectl
@ -32,14 +37,14 @@ $ ETCDCTL_API=3 etcdctl --write-out=table snapshot status backup.db
- kube-proxy
- kube-scheduler
- 在ansible控制端执行`ezctl upgrade k8s-01` 即可完成k8s 升级,不会中断业务应用
- 在kubeasz控制端执行`dk ezctl upgrade k8s-01` 即可完成k8s 升级,不会中断业务应用
### 其他升级说明
其他升级是指升级k8s组件包括`etcd版本` `docker版本`,一般不需要用到,不建议升级,以下仅作说明。
- 1.下载所有组件相关新的二进制解压并替换 `/etc/ansible/bin/` 目录下文件
- 1.下载所有组件相关新的二进制解压并替换 `/etc/kubeasz/bin/` 目录下文件
- 2.升级 etcd: `ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml -t upgrade_etcd playbooks/02.etcd.yml`

View File

@ -11,7 +11,7 @@ kube-router是一个简单、高效的网络插件它提供一揽子解决方
## 配置
本项目提供多种网络插件可选如果需要安装kube-router请在/etc/ansible/hosts文件中设置变量 `CLUSTER_NETWORK="kube-router"`,更多设置请查看`roles/kube-router/defaults/main.yml`
本项目提供多种网络插件可选如果需要安装kube-router请在/etc/kubeasz/hosts文件中设置变量 `CLUSTER_NETWORK="kube-router"`,更多设置请查看`roles/kube-router/defaults/main.yml`
- kube-router需要在所有master节点和node节点安装