diff --git a/docs/deprecated/practice/es_cluster.md b/docs/deprecated/practice/es_cluster.md index a75e2b4..3f48f30 100644 --- a/docs/deprecated/practice/es_cluster.md +++ b/docs/deprecated/practice/es_cluster.md @@ -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 diff --git a/docs/deprecated/practice/mariadb_cluster.md b/docs/deprecated/practice/mariadb_cluster.md index 719fe5c..5229454 100644 --- a/docs/deprecated/practice/mariadb_cluster.md +++ b/docs/deprecated/practice/mariadb_cluster.md @@ -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 ``` diff --git a/docs/guide/dashboard.1.6.3.md b/docs/guide/dashboard.1.6.3.md index 6682c45..58d592a 100644 --- a/docs/guide/dashboard.1.6.3.md +++ b/docs/guide/dashboard.1.6.3.md @@ -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) diff --git a/docs/guide/efk.md b/docs/guide/efk.md index 28dde36..20d3c44 100644 --- a/docs/guide/efk.md +++ b/docs/guide/efk.md @@ -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/ ``` #### 验证日志清理 diff --git a/docs/guide/helm2.md b/docs/guide/helm2.md deleted file mode 100644 index 840ab89..0000000 --- a/docs/guide/helm2.md +++ /dev/null @@ -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 </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) diff --git a/docs/guide/ingress-tls.md b/docs/guide/ingress-tls.md index 240b2b2..6aa1318 100644 --- a/docs/guide/ingress-tls.md +++ b/docs/guide/ingress-tls.md @@ -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 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 diff --git a/docs/guide/ingress.md b/docs/guide/ingress.md index 3b25f81..63e3467 100644 --- a/docs/guide/ingress.md +++ b/docs/guide/ingress.md @@ -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 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 diff --git a/docs/guide/jenkins.md b/docs/guide/jenkins.md index 800395b..5a62a5b 100644 --- a/docs/guide/jenkins.md +++ b/docs/guide/jenkins.md @@ -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 diff --git a/docs/guide/log-pilot.md b/docs/guide/log-pilot.md index 11c893d..ae178be 100644 --- a/docs/guide/log-pilot.md +++ b/docs/guide/log-pilot.md @@ -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.创建示例应用,采集日志 diff --git a/docs/mixes/01.fix_kubelet_annoymous_access.md b/docs/mixes/01.fix_kubelet_annoymous_access.md deleted file mode 100644 index 9491d9b..0000000 --- a/docs/mixes/01.fix_kubelet_annoymous_access.md +++ /dev/null @@ -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 -``` diff --git a/docs/mixes/TodoList.md b/docs/mixes/TodoList.md deleted file mode 100644 index 4dcc561..0000000 --- a/docs/mixes/TodoList.md +++ /dev/null @@ -1,31 +0,0 @@ -## 前言 - -`kubeasz`项目开始于`2017.11`,从最开始单一的ansible部署脚本朝着提供部署高可用 K8S集群的完整解决方案的目标不断前进;项目的发展需要各位的共同参与和贡献,希望越做越好,为国内k8s学习、实践者提供更多帮助。 -现在是很好的时间节点,梳理项目的`TodoList`/`Milestones`,以下是现有的一些想法,欢迎大家在[这里](https://github.com/easzlab/kubeasz/issues/188)参与讨论。 - -### 项目 TodoList - - - - - - - - - - - - - - - - - - - - - - -
类型描述备注
基础服务集群监控告警-prometheus已完成基础,待优化
应用服务服务治理-istio跟进
基础服务ingress-nginx待集成manifests及使用文档
- - diff --git a/docs/op/upgrade.md b/docs/op/upgrade.md index 328beb1..003b8cd 100644 --- a/docs/op/upgrade.md +++ b/docs/op/upgrade.md @@ -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` diff --git a/docs/setup/network-plugin/kube-router.md b/docs/setup/network-plugin/kube-router.md index b3c6fc4..edb202d 100644 --- a/docs/setup/network-plugin/kube-router.md +++ b/docs/setup/network-plugin/kube-router.md @@ -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节点安装