volume-mount

This commit is contained in:
huanqing.shao
2019-10-17 23:05:32 +08:00
parent 0cf7b605dc
commit b04a44e4d4
9 changed files with 209 additions and 18 deletions

View File

@ -1,7 +1,13 @@
<template> <template>
<div :style="$isDev ? 'background-color: grey;' : ''"> <div :style="$isDev ? 'background-color: #grey;' : ''">
<p> <p style="background-color: #f3f5f7;padding: 10px 5px 5px 5px;">
<Qq></Qq> 群号: 808894550 <span style="color: red; font-weight: 500;">在线答疑</span>也可以扫描本文末尾的二维码加群 <Qq></Qq>
群号: 808894550
<span style="color: red; font-weight: 500;">在线答疑</span>
初学者可选择在线课程语言更通俗
<span @click="$sendGaEvent('极客时间', '极客时间', '极客时间:' + $page.path)">
<a target="_blank" href="https://time.geekbang.org/column/intro/100015201?code=MH1Wu456g0ZsrKtQI7QidivKV2hVvzerAUxDz5pOuQs%3D">深入剖析Kubernetes</a>
</span>
</p> </p>
<slot></slot> <slot></slot>
<!-- <div class="adsense-page-top"> <!-- <div class="adsense-page-top">

View File

@ -202,6 +202,7 @@ module.exports = {
// ['install-k8s-upgrade', '升级Kubernetes集群'], // ['install-k8s-upgrade', '升级Kubernetes集群'],
'upgrade-k8s/1.15.x-1.15.4', 'upgrade-k8s/1.15.x-1.15.4',
'upgrade-k8s/1.15.x-1.16.x', 'upgrade-k8s/1.15.x-1.16.x',
'upgrade-k8s/calico-3.8-3.9',
] ]
}, },
{ {
@ -371,6 +372,7 @@ module.exports = {
collapsable: true, collapsable: true,
children: [ children: [
'k8s-intermediate/persistent/volume', 'k8s-intermediate/persistent/volume',
'k8s-intermediate/persistent/volume-mount-point.html',
'k8s-intermediate/persistent/pv', 'k8s-intermediate/persistent/pv',
'k8s-intermediate/persistent/storage-class', 'k8s-intermediate/persistent/storage-class',
'k8s-intermediate/persistent/nfs', 'k8s-intermediate/persistent/nfs',
@ -462,6 +464,13 @@ module.exports = {
'k8s-advanced/schedule/framework', 'k8s-advanced/schedule/framework',
] ]
}, },
{
title: '策略',
collapsable: true,
children: [
'k8s-advanced/policy/lr',
]
},
] ]
}, },
{ {

View File

@ -31,6 +31,6 @@ cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件 # 安装 calico 网络插件
# 参考文档 https://docs.projectcalico.org/v3.9/getting-started/kubernetes/ # 参考文档 https://docs.projectcalico.org/v3.9/getting-started/kubernetes/
rm -f calico.yaml rm -f calico.yaml
wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml wget https://docs.projectcalico.org/v3.9/manifests/calico.yaml --no-check-certificate
sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
kubectl apply -f calico.yaml kubectl apply -f calico.yaml

View File

@ -19,7 +19,7 @@ Kuboard 是一款基于 Kubernetes 的微服务管理界面。目的是帮助用
## Kubernetes安装文档 ## Kubernetes安装文档
* <a href="https://kuboard.cn/install/install-k8s.html">Kubernetes (K8S)v1.16.1 安装文档</a> * <a href="https://kuboard.cn/install/install-k8s.html">Kubernetes (K8S)v1.16.2 安装文档</a>
* 每天超过200名网友参考此文档完成Kubernetes安装 * 每天超过200名网友参考此文档完成Kubernetes安装
* QQ群在线答疑 * QQ群在线答疑
* <a href="https://kuboard.cn/install/install-kubernetes.html">Kubernetes 高可用安装文档</a> * <a href="https://kuboard.cn/install/install-kubernetes.html">Kubernetes 高可用安装文档</a>

View File

@ -156,7 +156,7 @@ lscpu
| ----------- | --------------------------------------- | ----------------------------------- | | ----------- | --------------------------------------- | ----------------------------------- |
| 7.7 | <span style="font-size: 24px;">😄</span> | 已验证 | | 7.7 | <span style="font-size: 24px;">😄</span> | 已验证 |
| 7.6 | <span style="font-size: 24px;">😄</span> | 已验证 | | 7.6 | <span style="font-size: 24px;">😄</span> | 已验证 |
| 7.5 | <span style="font-size: 24px;">😄</span> | 已验证 | | 7.5 | <span style="font-size: 24px;">🤔</span> | 已证实会出现 kubelet 无法启动的问题 |
| 7.4 | <span style="font-size: 24px;">🤔</span> | 待验证 | | 7.4 | <span style="font-size: 24px;">🤔</span> | 待验证 |
| 7.3 | <span style="font-size: 24px;">🤔</span> | 待验证 | | 7.3 | <span style="font-size: 24px;">🤔</span> | 待验证 |
| 7.2 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 | | 7.2 | <span style="font-size: 24px;">😞</span> | 已证实会出现 kubelet 无法启动的问题 |

View File

@ -0,0 +1,72 @@
---
# vssueId: 107
description: Kubernetes升级1.16.x。本文描述了如何从 Kubernetes 网络插件 calico 3.8.x 升级到 3.9。执行命令 kubectl describe deployment calico-kube-controllers -n kube-system 确认当前 calico 版本
meta:
- name: keywords
content: Kubernetes升级,K8S升级,升级calico
---
# 升级网络插件calico
<AdSenseTitle/>
::: danger
升级 calico 时,集群内部网络会不可用,请选择合适的时间升级
:::
## 确认当前版本
执行以下命令确认当前 calico 版本
``` sh
kubectl describe deployment calico-kube-controllers -n kube-system
```
输出结果如下所示:
``` yaml {18}
Name: calico-kube-controllers
Namespace: kube-system
CreationTimestamp: Tue, 20 Aug 2019 06:38:17 +0800
Labels: k8s-app=calico-kube-controllers
Annotations: deployment.kubernetes.io/revision: 1
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"k8s-app":"calico-kube-controllers"},"name":"calico-kub...
Selector: k8s-app=calico-kube-controllers
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: Recreate
MinReadySeconds: 0
Pod Template:
Labels: k8s-app=calico-kube-controllers
Annotations: scheduler.alpha.kubernetes.io/critical-pod:
Service Account: calico-kube-controllers
Containers:
calico-kube-controllers:
Image: calico/kube-controllers:v3.8.2
Port: <none>
Host Port: <none>
Readiness: exec [/usr/bin/check-status -r] delay=0s timeout=1s period=10s #success=1 #failure=3
Environment:
ENABLED_CONTROLLERS: node
DATASTORE_TYPE: kubernetes
Mounts: <none>
Volumes: <none>
```
## 清理已有安装
如上所示calico镜像是 v3.8.2,要清理已有 calico 安装,执行命令:
``` sh
# 如果版本号是 v3.8.2 或者 v3.8.x则删除命令如下
# calico.yaml 的URL中不带版本号的最后一位
kubectl delete -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml --no-check-certificate
```
## 安装新版本
执行以下命令,安装 calico 3.9
``` sh
kubectl delete -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml --no-check-certificate
```

View File

@ -13,11 +13,37 @@ meta:
<AdSenseTitle> <AdSenseTitle>
默认情况下,容器在 Kubernetes 集群上运行时,不受 [计算资源](/learning/k8s-intermediate/config/computing-resource.html) 的限制。使用 [Resource quota](./rq.html),集群管理员可以针对名称空间限定资源的使用情况。在名称空间内部,一个 Pod或容器的资源消耗不受限制。此时的顾虑在于可能有一个 Pod或容器独占了名称空间的大部分资源。Limit Range 是一种用来限定名称空间内 Pod或容器可以消耗资源数量的策略。 默认情况下,容器在 Kubernetes 集群上运行时,不受 [计算资源](/learning/k8s-intermediate/config/computing-resource.html) 的限制。使用 [Resource quota](./rq.html),集群管理员可以针对名称空间限定资源的使用情况。在名称空间内部,一个 Pod或容器的资源消耗不受限制。此时的顾虑在于可能有一个 Pod或容器独占了名称空间的大部分资源。Limit Range 是一种用来限定名称空间内 Pod或容器可以消耗资源数量的策略Policy
[[TOC]] [[TOC]]
KUbernetes `LimitRange` 对象可以:
* 限制名称空间中每个 Pod 或容器的最小最大计算资源
* 限制名称空间中每个 PersistentVolumeClaim 可使用的最小最大存储空间
* 限制名称空间中计算资源请求request、限定limit之间的比例
* 设置名称空间中默认的计算资源的 request/limit并在运行时自动注入到容器中
</AdSenseTitle> </AdSenseTitle>
## 启用 Limit Range
正在撰写 ... 执行命令 `kubectl api-resources` 可查看您的集群是否支持 Limit Range输出结果如下所示
``` {7}
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
endpoints ep true Endpoints
events ev true Event
limitranges limits true LimitRange
namespaces ns false Namespace
nodes no false Node
persistentvolumeclaims pvc true PersistentVolumeClaim
persistentvolumes pv false PersistentVolume
pods po true Pod
podtemplates true PodTemplate
```
通常 LimitRange 是默认启用的。
<!-- FIXME 如何启用 LimitRange -->

View File

@ -1,4 +1,5 @@
--- ---
vssueId: 140
layout: LearningLayout layout: LearningLayout
description: Kubernetes教程_本文介绍Kubernetes中Volume数据卷的挂载以及挂载传播MountPropagation的概念 description: Kubernetes教程_本文介绍Kubernetes中Volume数据卷的挂载以及挂载传播MountPropagation的概念
meta: meta:
@ -8,19 +9,101 @@ meta:
# 数据卷-挂载 # 数据卷-挂载
<AdSenseTitle/> <AdSenseTitle/>
参考文档: Kubernetes 官网文档 [Volumes](https://kubernetes.io/docs/concepts/storage/volumes/) > 参考文档: Kubernetes 官网文档 [Volumes](https://kubernetes.io/docs/concepts/storage/volumes/)
挂载是指将定义在 Pod 中的数据卷关联到容器,同一个 Pod 中的同一个数据卷可以被挂载到该 Pod 中的多个容器上。
## 数据卷内子路径
有时候我们需要在同一个 Pod 的不同容器间共享数据卷。使用 `volumeMounts.subPath` 属性,可以使容器在挂载数据卷时指向数据卷内部的一个子路径,而不是直接指向数据卷的根路径。
下面的例子中,一个 LAMPLinux Apache Mysql PHP应用的 Pod 使用了一个共享数据卷HTML 内容映射到数据卷的 `html` 目录,数据库的内容映射到了 `mysql` 目录:
``` yaml {15,22}
apiVersion: v1
kind: Pod
metadata:
name: my-lamp-site
spec:
containers:
- name: mysql
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "rootpasswd"
volumeMounts:
- mountPath: /var/lib/mysql
name: site-data
subPath: mysql
readOnly: false
- name: php
image: php:7.0-apache
volumeMounts:
- mountPath: /var/www/html
name: site-data
subPath: html
readOnly: false
volumes:
- name: site-data
persistentVolumeClaim:
claimName: my-lamp-site-data
```
### 通过环境变量指定数据卷内子路径
**FEATURE STATE** `Kubernetes v1.15` <Badge type="warning">beta</Badge> <Badge type="error">Kuboard暂不支持</Badge>
使用 `volumeMounts.subPathExpr` 字段,可以通过容器的环境变量指定容器内路径。使用此特性时,必须启用 `VolumeSubpathEnvExpansion` [feature gate](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/) (自 Kubernetes v1.15 开始,是默认启用的。)
同一个 volumeMounts 中 `subPath` 字段和 `subPathExpr` 字段不能同时使用。
如下面的例子,该 Pod 使用 `subPathExpr` 在 hostPath 数据卷 `/var/log/pods` 中创建了一个目录 `pod1`该参数来自于Pod的名字。此时宿主机目录 `/var/log/pods/pod1` 挂载到了容器的 `/logs` 路径:
``` yaml {9,19}
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: container1
env:
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
image: busybox
command: [ "sh", "-c", "while [ true ]; do echo 'Hello'; sleep 10; done | tee -a /logs/hello.txt" ]
volumeMounts:
- name: workdir1
mountPath: /logs
subPathExpr: $(POD_NAME)
readOnly: false
restartPolicy: Never
volumes:
- name: workdir1
hostPath:
path: /var/log/pods
```
## 容器内路径 ## 容器内路径
`mountPath` 数据卷被挂载到容器的路径,不能包含 `:`
## 权限 ## 权限
容器对挂载的数据卷是否具备读写权限,如果 `readOnly` 为 `true`,则只读,否则可以读写(为 `false` 或者不指定)。默认为 `false`
## 挂载传播 ## 挂载传播
数据卷的挂载传播Mount Propagation由 Pod 的 `spec.containers[*].volumeMounts.mountPropagation` 字段控制。可选的取值有: 数据卷的挂载传播Mount Propagation由 Pod 的 `spec.containers[*].volumeMounts.mountPropagation` 字段控制。可选的取值有:
* **None** 默认值。在数据卷被挂载到容器之后,此数据卷不会再接受任何后续宿主机或其他容器挂载到该数据卷对应目录下的子目录的挂载。同样的,在容器中向该数据卷对应目录挂载新目录时,宿主机也不能看到。对应 Linux 的 `private` mount propagation 选项[Linux内核文档](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) * **None** 默认值。在数据卷被挂载到容器之后,此数据卷不会再接受任何后续宿主机或其他容器挂载到该数据卷对应目录下的子目录的挂载。同样的,在容器中向该数据卷对应目录挂载新目录时,宿主机也不能看到。对应 Linux 的 `private` mount propagation 选项 [Linux内核文档](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)
* **HostToContainer**:在数据卷被挂载到容器之后,宿主机向该数据卷对应目录添加挂载时,对容器是可见的。对应 Linux 的 `rslave` mount propagation 选项 [Linux内核文档](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) * **HostToContainer**:在数据卷被挂载到容器之后,宿主机向该数据卷对应目录添加挂载时,对容器是可见的。对应 Linux 的 `rslave` mount propagation 选项 [Linux内核文档](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt)
@ -48,7 +131,3 @@ meta:
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl restart docker sudo systemctl restart docker
``` ```
## 数据卷
## 数据卷内子路径

View File

@ -11,16 +11,15 @@ Kuboard v1.0.x 的更新说明
**优化** **优化**
* 工作负载的名称前缀为可选添加 * Secret 填写 docker 地址时,是否要写 http://
* 存储类列表为空时,提示当前没有存储类
* 集群中事件过多时,名称空间页面渲染时间过长
**BUG 修复** **BUG 修复**
* 工作负载编辑器 --> Ingress --> 注解被错误写成标签了
* Prometheus 监控
* 工作负载编辑器 --> 容器组 --> 容忍 -- 正在开发 * 工作负载编辑器 --> 容器组 --> 容忍 -- 正在开发
* kubernetes 1.16.1
* HostAliases * HostAliases
* Limit Range * Limit Range