This commit is contained in:
huanqing.shao
2019-11-08 22:44:08 +08:00
parent 1bb50a28f3
commit 203ec80fc9
8 changed files with 293 additions and 5 deletions

View File

@ -434,6 +434,13 @@ module.exports = {
},
]
},
// {
// title: '部署LNMP应用',
// collapsable: true,
// children: [
// '/learning/k8s-practice/lnmp/wordpress'
// ]
// }
]
}
],

View File

@ -0,0 +1,67 @@
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: frontend
spec:
containers:
- image: wordpress:4.8-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: wordpress-mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wp-pv-claim

View File

@ -0,0 +1,65 @@
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim

View File

@ -12,6 +12,7 @@ description: 使用Kuboard在Kubernetes上安装监控套件并对example微
必须具备如下条件:
* 已完成 [导入 example 微服务](/guide/example/import.html)
* 已配置了 NFS [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html)
::: warning
@ -19,6 +20,10 @@ description: 使用Kuboard在Kubernetes上安装监控套件并对example微
:::
::: tip
许多网友自己搭建 NFS 测试环境,再创建 NFS存储类经常碰到 `access denied` 这类权限问题。为了帮助大家更快地完成 NFS 测试环境搭建Kuboard提供了一篇NFS相关的简明文档请参考 [搭建NFS Server](/learning/k8s-intermediate/persistent/nfs.html)
:::
假设您已进入 example 名称空间,如下图所示:
![Kubernetes教程在Kuboard中监控-进入名称空间](./import.assets/image-20190723121433809.png)
@ -29,11 +34,7 @@ description: 使用Kuboard在Kubernetes上安装监控套件并对example微
### 安装全局监控套件
::: tip
许多网友自己搭建 NFS 测试环境,再创建 NFS存储类经常碰到 `access denied` 这类权限问题。为了帮助大家更快地完成 NFS 测试环境搭建Kuboard提供了一篇NFS相关的简明文档请参考 [搭建NFS Server](/learning/k8s-intermediate/persistent/nfs.html)
:::
* 在 master 节点执行 <Badge type="error">此步骤不可忽略</Badge>
* 在 master 节点执行 <Badge type="error">此步骤必须执行</Badge>
```bash
kubectl -n kube-system create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

66
install/faq/warning.md Normal file
View File

@ -0,0 +1,66 @@
---
vssueId: 150
description: Kuboard界面上_时常会出现工作负载_Deployment_StatefulSet_DaemonSet_等为红色_且带一个红色E图标的情况_本文解释了该图标的含义以及如何清理
meta:
- name: keywords
content: Kubernetes 管理界面, Kuboard, K8S管理界面
---
# 错误提示
Kuboard中经常会出现如下情况某一个工作负载Deployment/StatefulSet/DaemonSet等显示为红色且有一个闪烁的红色 `E` 图标。
![image-20191108220746427](./warning.assets/image-20191108220746427.png)
此为 Kuboard 中设计的一个错误提示方式,其具体实现方式是:
* 遍历当前的所有事件,对于每一个事件:
* 如果事件类型为 Normal则跳过
* 如果事件类型为 Warining则对比该事件源对象产生该事件的Kubernetes 对象)的名字(假设为 event_source_name与当前工作负载假设为work_load_name的名字
* 如果 event_source_name.indexOf(work_load_name) === 0则该工作负载显示错误提示
* 如果 event_source_name.indexOf(work_load_name) !== 0则跳过
使用此方式,我们可以快速查看到名称空间中存在问题的工作负载,并迅速对其进行诊断。
但是这种告警方式并不是完美的,具体来说,会发生如下情况:
## 实际正常,但提示错误
实际上您的工作负载Deployment、StatefulSet、DaemonSet等已经正常工作但是仍然提示有错误信息。此种情况通常发生在类似如下的场景中
### 场景一:
* 创建Deployment但未创建所需要的PVC
* 此时该Deployment的Pod不能调度并伴随着 PVC 未绑定的错误事件
* 创建PVCPod成功调度Deployment正常工作
* 此时虽然Pod已经正常但是该Pod原来的错误事件仍然存在因此Kuboard仍然会显示此错误提示
### 场景二:
* 创建Deployment但该Deployment依赖的数据库未启动
* 此时该Deployment的Pod将Crash
* 启动数据库
* 删除Deployment原有的Pod
* 此时Deployment创建新Pod以维持所需要的副本数
* 新的Pod正常工作
* 此时虽然与错误事件关联的Pod已经删除但是该Pod产生的错误事件仍然存在且与Deployment的名称匹配因此Kuboard仍将显示错误标志
### 修正办法
* 在名称空间左上角点击 **事件** 按钮,将进入事件列表查看界面
* 将已经失效的错误事件删除
> 点击事件的图标,可删除事件
## 界面卡顿
当名称空间中工作负载的数量,以及集群中错误事件的数量特别多时,在进入名称空间界面时可能出现卡顿,但是只要成功进入,一切工作都是正常的。
卡顿的原因是Kuboard在循环遍历事件与工作负载的匹配情况通常只有在在工作负载数量和事件数量都特别多时才会出现卡顿在 1.0.4 版本中优化之后,速度已经得到了非常可观的提升。
如果您仍然碰到了卡顿的现象,可以尝试:
* 删除事件
执行命令 `kubectl delete events --all-namespaces`。由于 Kubernetes 的控制器模式Kubernetes会不断尝试失败的操作因此删除事件通常是安全的过一阵子原有的错误事件又会重复出现
* 向Kuboard反馈此问题
本文页尾有Kuboard支持社群的入群方式直接联系群主即可

View File

@ -0,0 +1,77 @@
---
# vssueId: 67
layout: LearningLayout
lessAds: true
description: Kubernetes教程_本文描述了如何在K8S上部署一个WordPress和MySQL应用_并将数据存储在PersistentVolume中
meta:
- name: keywords
content: Kubernetes教程,K8S教程,K8S PHP,K8S培训,K8S教程
---
# 在K8S上部署WordPress和MySQL
<AdSenseTitle>
> 参考文档: [Example: Deploying WordPress and MySQL with Persistent Volumes](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
本文描述了如何在K8S上部署一个WordPress和MySQL应用本文中WordPress和MySQL都使用 PersistentVolume 和 PersistentVolumeClaim 存储数据。
[PersistentVolume](/learning/k8s-intermediate/persistent/pv.html) 是集群中可用的一片存储空间,通常由集群管理员手工提供,或者由 Kubernetes 使用 [StorageClass](/learning/k8s-intermediate/persistent/storage-class.html) 自动提供。
[PersistentVolumeClaim](/learning/k8s-intermediate/persistent/pv.html#存储卷和存储卷声明的关系) 代表了用户(应用程序)对存储空间的需求,此需求可由 PersistentVolume 满足。
PersistentVolume 和 PersistentVolumeClaim 都是独立于 Pod 的生命周期,可用于在 Pod 重启、重新调度、甚至删除之后保存数据。
::: danger 警告
本文中的例子不适合用于生产环境使用,因为例子中使用了一个 WordPress 实例和一个 MySQL 实例。可以考虑使用 [WordPress Helm Chart](https://github.com/kubernetes/charts/tree/master/stable/wordpress) 在生产环境中部署 WordPress。
:::
[[TOC]]
</AdSenseTitle>
## 主要步骤
* 创建 PersistentVolumeClaim 和 PersistentVolume
* 创建一个 `kustomization.yaml`,其中包括:
* 一个 Secret generator
* MySQL配置资源
* WordPress配置资源
* 执行 `kubectl apply -k ./` 将 kustomization 目录应用到集群
* 执行清理
## 前提条件
* 您必须有一个K8S集群
* 可参考 [安装Kubernetes单Master节点集群](/install/install-k8s.html)
* kubectl 版本不低于 1.14,可参考 [安装kubectl](/install/install-kubectl.html)
* 在执行 kubectl 命令的机器上任意位置创建一个空白目录用于本例子的执行。本文假设后续所有命令的当前目录都是此时创建的这个目录。
## 创建PersistentVolumeClaim和PersistentVolume
MySQL 和 WordPress 都需要一个 PersistentVolume 存储数据。他们的 PersistentVolumeClaim 将被在部署应用时创建。
## 创建kustomization.yaml
### 添加一个Secret generator
[Secret](/learning/k8s-intermediate/config/secrets/) 对象可以存储敏感信息,例如 password 或者 key。自 Kubernetes 1.14 开始,`kubectl` 支持使用 kustomization 文件管理对象。可以在 `kustomization.yaml` 文件中定义一个 generator 以创建 Secret 对象。
执行下面的命令,创建 `kustomization.yaml` 文件,该文件中包含一个 Secret generator。
> 您需要将 `YOUR_PASSWORD` 替换成您自己想要使用的密码
``` sh
cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass
literals:
- password=YOUR_PASSWORD
EOF
```
## 为MySQL和WordPress添加配置信息
## 应用和验证
## 清理

View File

@ -12,6 +12,7 @@ Kuboard v1.0.x 的更新说明
* 清理事件
* EndPoint
* 导入工作负载时,如果存储类没有 annotations不应该报错
* 表单校验:数据卷名不能带小数点
@ -19,6 +20,10 @@ Kuboard v1.0.x 的更新说明
* 工作负载编辑器 --> 容器组 --> 容忍 -- 正在开发
* Limit Range
* 可以在这里加一个自动部署的按钮点击按钮显示部署秘钥。shell 脚本可以加一句curl http://kubord.com?秘钥+版本。镜像推送到仓库之后shell脚本加一句这个curl就可以完成k8s自动集成了
*
* 容器组列表,筛选结果为空时,提示筛选 “其他”
* https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/