LimitRange

This commit is contained in:
huanqing.shao
2019-10-18 23:47:36 +08:00
parent b04a44e4d4
commit 445e05855a
27 changed files with 1072 additions and 389 deletions

View File

@ -1,6 +1,6 @@
<template>
<div :style="$isDev ? 'background-color: #grey;' : ''">
<p style="background-color: #f3f5f7;padding: 10px 5px 5px 5px;">
<div :style="$isDev ? 'background-color: #grey;' : ''" v-if="!$frontmatter.lessAds">
<p style="background-color: #f3f5f7;padding: 10px 5px 5px 10px;">
<Qq></Qq>
群号: 808894550
<span style="color: red; font-weight: 500;">在线答疑</span>

View File

@ -0,0 +1,29 @@
<template>
<div style="margin-top: 10px;">
友情链接
<span v-for="item in urls" style="margin-right: 10px;"
@click="$sendGaEvent('友情链接', '友情链接: ' + item.name, '友情链接:' + item.name + ' --- ' + $page.path)">
<a target="_blank" :href="item.url + '?utm_source=kuboard.cn'">
{{item.name}}
</a>
</span>
</div>
</template>
<script>
export default {
data () {
return {
urls: [
{name: 'sealos 官网', url: 'https://sealyun.com/'},
{name: '云原生实验室', url: 'https://www.yangcs.net/'},
]
}
}
}
</script>
<style>
</style>

View File

@ -94,6 +94,7 @@
<div class="footer">
Copyright © 2019-present 邵欢庆 <span @click="$sendGaEvent('友情链接', '友情链接: 仁聚汇通', '友情链接:' + $page.path)"><a href="http://www.eigpay.com" target="_blank">仁聚汇通</a></span> | 京ICP备19008693号-2
<FriendlyUrl></FriendlyUrl>
</div>
<AdSenseRightSide/>
</main>

View File

@ -7,7 +7,7 @@
<div>
<p>必须选中下面的个勾选框才能继续</p>
<p style="color: red">必须选中下面的个勾选框才能继续</p>
<p>选中后显示 安装 docker/kubelet 的文档</p>
<div style="display: inline-block; width: 480px; max-width: calc(100vw - 100px); overflow: hidden; line-height: 40px; background-color: rgba(255,229,100,0.3); padding: 20px 0 0 20px; margin-bottom: 20px; border: 1px solid #d7dae2;">
@ -15,10 +15,11 @@
<el-form-item prop="checked" class="env-form-item">
<el-checkbox-group v-model="form.checked">
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="centos">我的任意节点 centos 版本在兼容列表中</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="hostname">我的任意节点 hostname 不是 localhost且不包含下划线</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="cpu">我的任意节点 CPU 内核数量大于等于 2</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="docker">我的任意节点不会直接使用 docker run docker-compose 运行容器</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="hostname">我的任意节点 hostname 不是 localhost且不包含下划线和小数点</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="ipaddress">我的任意节点都有固定的内网 IP 地址</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="networkcard">我的任意节点只有一块网卡可以在完成K8S安装后再添加网卡</el-checkbox> </li>
<li style="height: 40px;"> <el-checkbox style="width: 300px; max-width: calc(100vw - 100px); text-align: left;" label="docker">我的任意节点不会直接使用 docker run docker-compose 运行容器</el-checkbox> </li>
</el-checkbox-group>
</el-form-item>
</el-form>
@ -35,6 +36,7 @@
</div>
<el-collapse-transition>
<div v-show="envOk" key="ok">
<el-button style="margin-top: 10px;" @click="review" type="text">再看看我是否符合安装条件</el-button>
<slot></slot>
</div>
</el-collapse-transition>
@ -42,7 +44,7 @@
</template>
<script>
const ENV_COUNT = 5
const ENV_COUNT = 6
export default {
props: {
@ -83,6 +85,7 @@ export default {
},
envOk () {
if (this.envOk) {
this.$message.success('如果您符合刚才六个条件,请继续安装')
this.$sendGaEvent('install-' + this.type, 'envOk-' + this.type, '已确认环境符合条件-' + this.type)
}
}
@ -96,6 +99,10 @@ export default {
return { flag: false, message: '请翻到本页最下方,并确认您的环境符合要求的条件' }
}
return { flag: true, message: 'can slide next' }
},
review () {
this.form.checked = []
this.$sendGaEvent('install-' + this.type, 'envReview-' + this.type, '回顾安装条件-' + this.type)
}
}
}

View File

@ -0,0 +1,57 @@
<template>
<div style="margin-top: 20px;">
<Vssue :issueId="71" :options="options"/>
</div>
</template>
<script>
export default {
data() {
return {
vssues: {},
refreshId: undefined
}
},
computed: {
isLocalHost() {
// if (typeof window !== 'undefined') {
// if (window.location.host === 'localhost:8080') {
// return true
// }
// }
return false
},
options () {
let _this = this
let result = {
platform: 'github',
locale: 'zh-CN',
autoCreateIssue: true,
admins: ['shaohq'],
// all other options of Vssue are allowed
owner: 'eip-work',
repo: 'kuboard-press',
clientId: this.isLocalHost ? 'f96af83d4bff4e2b9e3e' : '8141f5c205ad2f6d90d5',
clientSecret: this.isLocalHost ? 'cf5686d68d4aab6d3bfa256da9a714049b239c1f' : 'b3e238508a2e8da9f2b355662b4cb3e62ecaa1d4',
issueContent: (options, url) => { return 'https://kuboard.cn' + _this.$route.path },
perPage: 50
}
return result
},
},
mounted () {
this.$set(this.vssues, this.$route.path, this.$frontmatter.vssueId)
},
watch: {
'$route.path': function () {
this.$set(this.vssues, this.$route.path, this.$frontmatter.vssueId)
}
},
}
</script>
<style>
.vssue-header-powered-by {
display: none;
}
</style>

View File

@ -29,6 +29,12 @@ module.exports = {
// `],
['script', { 'data-ad-client': "ca-pub-3313149841665250", async: true, src: "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"}],
// <script data-ad-client="ca-pub-3313149841665250" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
// ['script', { 'type': 'text/javascript', async: true, src: '//downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js', 'data-dojo-config': 'usePlainJson: true, isDebug: false'}],
// ['script', { 'type': 'text/javascript' }, `
// window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us20.list-manage.com","uuid":"2273cb19eb20bb1bc5b7745a7","lid":"f1f25d6dac","uniqueMethods":true}) })
// `],
// <script type="text/javascript" src="//downloads.mailchimp.com/js/signup-forms/popup/unique-methods/embed.js" data-dojo-config="usePlainJson: true, isDebug: false"></script>
// <script type="text/javascript">window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us20.list-manage.com","uuid":"2273cb19eb20bb1bc5b7745a7","lid":"f1f25d6dac","uniqueMethods":true}) })</script>
],
markdown: {
toc: { includeLevel: [2, 3] },
@ -64,7 +70,7 @@ module.exports = {
// },
'@vssue/vuepress-plugin-vssue': {
// set `platform` rather than `api`
platform: 'github',
platform: 'github-v4',
locale: 'zh-CN',
autoCreateIssue: false,
admins: ['shaohq'],
@ -201,7 +207,7 @@ module.exports = {
children: [
// ['install-k8s-upgrade', '升级Kubernetes集群'],
'upgrade-k8s/1.15.x-1.15.4',
'upgrade-k8s/1.15.x-1.16.x',
['upgrade-k8s/1.15.x-1.16.x', 'K8S从1.15.x(1.16.x)升级到 1.16.x'],
'upgrade-k8s/calico-3.8-3.9',
]
},
@ -209,11 +215,11 @@ module.exports = {
title: '管理 Kubernetes',
collapsable: false,
children: [
'install-dashboard',
'install-dashboard-upgrade',
'install-kubectl',
'config-kubectl',
'install-k8s-dashboard',
'install-dashboard',
'install-dashboard-upgrade'
]
},
// {
@ -468,7 +474,14 @@ module.exports = {
title: '策略',
collapsable: true,
children: [
'k8s-advanced/policy/lr',
{
title: 'Limit Range',
collapsable: true,
children: [
'k8s-advanced/policy/lr',
'k8s-advanced/policy/lr_container',
]
},
]
},
]

View File

@ -0,0 +1,3 @@
User-agent: *
Allow: /
Disallow: /support/

View File

@ -0,0 +1,19 @@
apiVersion: v1
kind: LimitRange
metadata:
name: limit-mem-cpu-per-container
spec:
limits:
- max:
cpu: "800m"
memory: "1Gi"
min:
cpu: "100m"
memory: "99Mi"
default:
cpu: "700m"
memory: "900Mi"
defaultRequest:
cpu: "110m"
memory: "111Mi"
type: Container

View File

@ -0,0 +1,37 @@
apiVersion: v1
kind: Pod
metadata:
name: busybox1
spec:
containers:
- name: busybox-cnt01
image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello from cnt01; sleep 10;done"]
resources:
requests:
memory: "100Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "500m"
- name: busybox-cnt02
image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello from cnt02; sleep 10;done"]
resources:
requests:
memory: "100Mi"
cpu: "100m"
- name: busybox-cnt03
image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello from cnt03; sleep 10;done"]
resources:
limits:
memory: "200Mi"
cpu: "500m"
- name: busybox-cnt04
image: busybox
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello from cnt04; sleep 10;done"]

View File

@ -51,7 +51,7 @@
</div>
<div class="page-nav" style="max-width: 1000px; padding-top:0; margin-top: 1rem;">
<div class="page-nav" style="max-width: 1000px; padding-top:0; margin-top: 1rem;" v-if="!$frontmatter.lessAds">
<AdSensePageBottomInline/>
</div>
<!-- <div style="text-align: center; margin-bottom: 10px;" v-if="$page.path.indexOf('/learning/') === 0">

View File

@ -1,7 +1,7 @@
<template>
<div>
<div v-for="(item, key) in vssues" :key="key">
<Vssue v-if="item" v-show="key === $route.path" :issueId="item" :options="options"/>
<Vssue v-if="item && item > 0" v-show="key === $route.path" :issueId="item" :options="options"/>
<div v-if="item === undefined && isLocalHost" v-show="key === $route.path" :key="key">
<el-button type="danger" @click="vssues[key] = ''">请创建 VssueId</el-button>
</div>

View File

@ -30,7 +30,12 @@
</div>
<StarGazer/>
</div>
<div slot="page-bottom" class="bottom-description">Copyright © 2019-present 邵欢庆 <span @click="$sendGaEvent('友情链接', '友情链接: 仁聚汇通', '友情链接:' + $page.path)"><a href="http://www.eigpay.com" target="_blank">仁聚汇通</a></span> | 京ICP备19008693号-2
<div slot="page-bottom" class="bottom-description">
Copyright © 2019-present 邵欢庆
<span @click="$sendGaEvent('友情链接', '友情链接: 仁聚汇通', '友情链接:' + $page.path)">
<a href="http://www.eigpay.com" target="_blank">仁聚汇通</a>
</span> | 京ICP备19008693号-2
<FriendlyUrl></FriendlyUrl>
</div>
</ParentLayout>
</template>

View File

@ -39,7 +39,12 @@
</div>
</div>
</div>
<div slot="page-bottom" class="bottom-description">Copyright © 2019-present 邵欢庆 <span @click="$sendGaEvent('友情链接', '友情链接: 仁聚汇通', '友情链接:' + $page.path)"><a href="http://www.eigpay.com" target="_blank">仁聚汇通</a></span> | 京ICP备19008693号-2
<div slot="page-bottom" class="bottom-description">
Copyright © 2019-present 邵欢庆
<span @click="$sendGaEvent('友情链接', '友情链接: 仁聚汇通', '友情链接:' + $page.path)">
<a href="http://www.eigpay.com" target="_blank">仁聚汇通</a>
</span> | 京ICP备19008693号-2
<FriendlyUrl></FriendlyUrl>
</div>
</ParentLayout>
</template>

View File

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

View File

@ -121,7 +121,7 @@ hostnamectl status
``` sh
# 在 master 节点和 worker 节点都要执行
curl -sSL https://kuboard.cn/install-script/v1.15.3/install_kubelet.sh | sh
curl -sSL https://kuboard.cn/install-script/v1.15.3/install-kubelet.sh | sh
```
@ -130,7 +130,7 @@ curl -sSL https://kuboard.cn/install-script/v1.15.3/install_kubelet.sh | sh
手动执行以下代码,效果与快速安装完全相同。
<<< @/.vuepress/public/install-script/v1.15.3/install_kubelet.sh
<<< @/.vuepress/public/install-script/v1.15.3/install-kubelet.sh
::: warning
如果此时执行 `service status kubelet` 命令,将得到 kubelet 启动失败的错误提示,请忽略此错误,因为必须完成后续步骤中 kubeadm init 的操作kubelet 才能正常启动
@ -183,7 +183,7 @@ export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.15.3/init_master.sh | sh
curl -sSL https://kuboard.cn/install-script/v1.15.3/init-master.sh | sh
```
</el-tab-pane>
@ -198,7 +198,7 @@ export POD_SUBNET=10.100.0.1/16
echo "127.0.0.1 ${APISERVER_NAME}" >> /etc/hosts
```
<<< @/.vuepress/public/install-script/v1.15.3/init_master.sh
<<< @/.vuepress/public/install-script/v1.15.3/init-master.sh
</el-tab-pane>
</el-tabs>

View File

@ -1,12 +1,12 @@
---
vssueId: 92
description: Kubernete升级_使用kubeadm升级K8S集群到v1.15.4
description: Kubernete升级_使用kubeadm升级K8S集群到v1.15.5
meta:
- name: keywords
content: Kubernetes升级,K8S升级,升级Kuberentes1.15.4
content: Kubernetes升级,K8S升级,升级Kuberentes1.15.5
---
# K8S从1.15.x升级到 1.15.4
# K8S从1.15.x升级到 1.15.5
<AdSenseTitle/>
@ -15,11 +15,11 @@ meta:
## 前提条件
* 您使用 kubeadm 安装了 kubernetes v1.15.0 / v1.15.1 / v1.15.2 / v1.15.3 集群
* 您想要将其升级到最新的版本 kubernetes v1.15.4
* 您使用 kubeadm 安装了 kubernetes v1.15.0 / v1.15.1 / v1.15.2 / v1.15.3 / v1.15.4 集群
* 您想要将其升级到最新的版本 kubernetes v1.15.5
::: tip
www.kuboard.cn 是一款免费的基于 Kubernetes 的微服务管理界面,目前只能提供 kubernetes v1.15.0 / v1.15.1 / v1.15.2 / v1.15.3 到 kubernetes v1.15.4 的升级文档,其他版本的集群,请参考 kubernetes 官网文档 [kubeadm upgrade](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/)
www.kuboard.cn 是一款免费的基于 Kubernetes 的微服务管理界面,目前只能提供 kubernetes v1.15.0 / v1.15.1 / v1.15.2 / v1.15.3 到 kubernetes v1.15.5 的升级文档,其他版本的集群,请参考 kubernetes 官网文档 [kubeadm upgrade](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/)
:::
## 升级 kubeadm/kubelet/kubectl
@ -28,7 +28,7 @@ www.kuboard.cn 是一款免费的基于 Kubernetes 的微服务管理界面,
``` sh
# 在所有节点执行(包括 master 和 worker 节点)
yum install -y kubelet-1.15.4 kubeadm-1.15.4 kubectl-1.15.4
yum install -y kubelet-1.15.5 kubeadm-1.15.5 kubectl-1.15.5
systemctl daemon-reload
systemctl restart kubelet
```
@ -74,7 +74,7 @@ scheduler: {}
文件内容如下所示,根据前面 `kubeadm config view` 的执行结果,修改了如下字段:
* imageRepository 的值修改为registry.cn-hangzhou.aliyuncs.com/google_containers
* kubernetesVersion 的值修改为: v1.15.4
* kubernetesVersion 的值修改为: v1.15.5
``` yaml {15,17}
apiServer:
extraArgs:
@ -92,7 +92,7 @@ etcd:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.15.4
kubernetesVersion: v1.15.5
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12

View File

@ -6,12 +6,38 @@ meta:
content: Kubernetes升级,K8S升级,升级Kuberentes1.16.x,Kubernetes升级到1.16
---
# K8S从1.15.x(1.16.x)升级到 1.16.x
# Kubernetes高危漏洞及解决办法CVE-2019-11253
<!-- # K8S从1.15.x(1.16.x)升级到 1.16.x -->
<AdSenseTitle/>
参考文档: kubernetes 官网文档 [kubeadm upgrade](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/)
**【漏洞详情】**
2019年10月17日Kubernetes发布漏洞公告 [[ANNOUNCE] CVE-2019-11253: denial of service vulnerability from malicious YAML or JSON payloads](https://discuss.kubernetes.io/t/announce-cve-2019-11253-denial-of-service-vulnerability-from-malicious-yaml-or-json-payloads/8349)。具备一定权限的攻击者通过发送恶意的 YAML 或 JSON 格式的攻击包可导致 kube-apiserver CPU 或内存资源耗尽无法正常提供服务1.14.0 之前的版本由于默认RBAC策略允许匿名用户提交请求所以之前的版本均在影响范围。
【风险等级】
<font color="red" weight="500">高风险</font>
【影响版本】
* Kubernetes v1.0.0-1.12.x
* Kubernetes v1.13.0-1.13.11v1.13.12版本已修复)
* Kubernetes v1.14.0-1.14.7v1.14.8版本已修复)
* Kubernetes v1.15.0-1.15.4v1.15.5版本已修复)
* Kubernetes v1.16.0-1.16.1v1.16.2版本已修复)
【安全版本】
* Kubernetes v1.13.12
* Kubernetes v1.14.8
* Kubernetes v1.15.5
* Kubernetes v1.16.2
【修复建议】
请升级到对应的【安全版本】。本文提供了如何升级到 1.16.2 的方法。另可参考 [K8S从1.15.x升级到 1.15.5](./1.15.x-1.15.4.html)
本文描述了如何从 kubernetes v1.15.x或1.16.x升级到 Kubernetes v1.16.y前提是您的 Kubernetes 集群是使用 kubeadm 安装的。
升级的高阶过程如下所示:

View File

@ -1,5 +1,5 @@
---
# vssueId: 107
vssueId: 141
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
@ -60,13 +60,52 @@ Pod Template:
``` 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
kubectl delete -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
```
## 安装新版本
执行以下命令,安装 calico 3.9
执行命令查看kubernetes
``` sh
kubectl delete -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml --no-check-certificate
``` yaml {21}
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: apiserver.demo:6443
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.100.0.1/16
scheduler: {}
```
执行以下命令,安装 calico 3.9,请注意,下面的 POD_SUBNET 环境变量来自于上面的输出结果:
``` sh {2}
# 命令行中环境变量 POD_SUBNET 的取值 10.100.0.1/16 来自于上一个命令的输出结果
export POD_SUBNET=10.100.0.1/16
rm -f 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
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
```
此时可执行命令检查 calico 的版本:
``` sh
kubectl describe deployment calico-kube-controllers -n kube-system
```
:tada: :tada: :tada:

View File

@ -1,13 +1,14 @@
---
# vssueId: 135
vssueId: 143
titlePrefix: LimitRange
layout: LearningLayout
description: Kubernetes教程_
description: Kubernetes教程_默认情况下_容器在 Kubernetes 集群上运行时_不受计算资源的限制_使用Resourcequota集群管理员可以针对名称空间限定资源的使用情况
meta:
- name: keywords
content: Kubernetes
---
# Limit Ranges
# 概述
> 参考文档:[Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/)
@ -47,3 +48,30 @@ podtemplates tr
通常 LimitRange 是默认启用的。
<!-- FIXME 如何启用 LimitRange -->
## 基本介绍
* 集群管理员在名称空间中创建一个 `LimitRange` 对象
* 用户在名称空间中创建工作负载等对象,例如 Pod、Container、PersistentVolumeClaim 等
* 针对那些没有设置 [计算资源请求request和限制limit](/learning/k8s-intermediate/config/computing-resource.html) 的 Pod 和容器,`LimitRanger` 根据名称空间中的 `LimitRange` 对象为其设定默认的资源请求和响应,并确保 Pod 和容器对计算资源的实际消耗不会超过指定的值
* 如果创建或更新对象Pod、Container、PersistentVolumeClaim的请求与 Limit Range 的限定相冲突apiserver 将返回 HTTP status 状态码 `403 FORBIDDEN`,以及相应的错误提示信息
* 如果名称空间中激活了 limit range 来限定 cpu 和内存等计算资源的使用,则,用户创建 Pod、Container 时,必须指定 cpu 或内存的 `request` 和 `limit`,否则系统将拒绝创建 Pod
* Kubernetes 只在 Pod 创建阶段检查 `LimitRange` 的限定,而不在 Pod 运行时执行任何检查
使用 LimitRange 的例子有:
* 在一个总容量为 8G内存 16核CPU 的 2 节点集群上,限定某个名称空间中的 Pod 使用 100m的CPU请求request且不超过 500m的CPU上限limit200Mi的内存请求request且不超过 600Mi的内存上线limit
* 为没有定义cpu和内存请求的容器指定默认的 CPU 请求request和限制limit均为 150m默认的内存请求为 300Mi
当名称空间总的 limit 小于名称空间中 Pod/Container 的 limit 之和时,将发生资源争夺的现象,容器或者 Pod 将不能创建。
在资源争夺现象发生时,或者修改 limitrange 的时候,这两种情况都不会影响到已经创建的 Pod/Container。
更多内容请参考:
* [限定容器的计算资源](./lr_container.html)
* [限定Pod的计算资源]
* [限定存储资源]
* [Limit/Request 比例]
* [例子]

View File

@ -0,0 +1,172 @@
---
vssueId: 143
layout: LearningLayout
description: Kubernetes教程_本文讨论了如何在容器级别创建 LimitRange。假设有一个 Pod 包含 4个容器每个容器都定义了 spec.resource此时 LimitRanger 管理控制器在处理该 Pod 中的 4个容器是处理方式是不一样的。
meta:
- name: keywords
content: Kubernetes
---
# 限定容器的计算资源
> 参考文档:[Limit Ranges](https://kubernetes.io/docs/concepts/policy/limit-range/)
<AdSenseTitle>
</AdSenseTitle>
本文讨论了如何在容器级别创建 LimitRange。假设有一个 Pod 包含 4个容器每个容器都定义了 `spec.resource`,此时 LimitRanger 管理控制器在处理该 Pod 中的 4个容器是处理方式是不一样的。
演示步骤如下:
* 执行如下命令创建名称空间 `limitrange-demo`
``` sh
kubectl create namespace limitrange-demo
```
将 kubectl 默认名称空间切换至 `limitrange-demo`
``` sh
kubectl config set-context --current --namespace=limitrange-demo
```
* LimitRange 对象的 yaml 文件如下所示:
<<< @/.vuepress/public/statics/learning/policy/lr-container-limit-range.yaml
该对象为名称空间中的容器定义了:
* 最大和最小的CPU/内存
* 默认的 CPU/内存限定
* 默认的 CPU/内存请求
执行命令以创建该对象:
``` sh
kubectl create -f https://kuboard.cn/statics/learning/policy/lr-container-limit-range.yaml -n limitrange-demo
```
执行命令查看结果
``` sh
kubectl describe limitrange/limit-mem-cpu-per-container -n limitrange-demo
```
输出结果如下所示
```
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container cpu 100m 800m 110m 700m -
Container memory 99Mi 1Gi 111Mi 900Mi -
```
* 前面提到的包含 4 个容器的 Pod其 yaml 文件如下所示:
<<< @/.vuepress/public/statics/learning/policy/lr-container-pod.yaml
执行命令以创建该 Pod
``` sh
kubectl apply -f https://kuboard.cn/statics/learning/policy/lr-container-pod.yaml
```
## 容器包含有效的 CPU/内存的requests/limits
执行以下命令,查看 `busybox-cnt01` 的配置信息
``` sh
kubectl get po/busybox1 -n limitrange-demo -o json | jq ".spec.containers[0].resources"
```
输出结果如下所示
``` json
{
"limits": {
"cpu": "500m",
"memory": "200Mi"
},
"requests": {
"cpu": "100m",
"memory": "100Mi"
}
}
```
* `busybox` Pod 中的容器 `busybox-cnt01` 定义了 `requests.cpu=100m` 和 `requests.memory=100Mi`
* `100m <= 500m <= 800m` 容器的 cpu limit500m在名称空间 LimitRange 指定的范围内
* `99Mi <= 200Mi <= 1Gi` 容器的内存 limit200Mi在名称空间 LimitRange 指定的范围内
* 没有为CPU/内存指定 request/limit 比例
* 此时容器的定义是有效的,将被创建
## 容器包含有效的 CPU/内存requests且没有指定limits
执行以下命令,查看 `busybox-cnt02` 的配置信息
```sh
kubectl get po/busybox1 -n limitrange-demo -o json | jq ".spec.containers[1].resources"
```
输出结果如下所示
``` json
{
"limits": {
"cpu": "700m",
"memory": "900Mi"
},
"requests": {
"cpu": "100m",
"memory": "100Mi"
}
}
```
* `busybox` Pod 中的容器 `busybox-cnt02` 定义了 `requests.cpu=100m` 和 `requests.memory=100Mi`,且为指定 CPU/内存的最大限定
* 由于容器没有定义 limits则名称空间的 LimitRange 定义的 `limits.cpu=700mi` 和 `limits.memory=900Mi` 被注入到该容器
* `100m <= 700m <= 800m` 容器的CPU最大限定700m在名称空间 LimitRange 指定的范围内
* `99Mi <= 900Mi <= 1Gi` 容器的内存 limit900Mi在名称空间 LimitRange 指定的范围内
* 没有为CPU/内存指定 request/limit 比例
* 此时容器的定义是有效的,将被创建
## 容器包含有效的CPU/内存limits且没有指定requests
执行以下命令,查看 `busybox-cnt03` 的配置信息
``` sh
kubectl get po/busybox1 -n limitrange-demo -o json | jq ".spec.containers[2].resources"
```
输出结果如下所示
``` json
{
"limits": {
"cpu": "500m",
"memory": "200Mi"
},
"requests": {
"cpu": "500m",
"memory": "200Mi"
}
}
```
* `busybox` Pod 中的容器 `busybox-cnt03` 定义了 `limits.cpu=500m` 和 `limits.memory=200Mi`,且没有指定 CPU/内存的 `requests`
* 由于容器没有定义 `requests`,名称空间中 LimitRange 定义的 `defaultRequest` 并没有注入到容器的 `request` 字段,反而,容器定义的 `limits` 被设置到了其 `requests` 字段: `limits.cpu=500m` 和 `limits.memory=200Mi`
* `100m <= 500m <= 800m` 容器的 cpu 最大限定500m在名称空间 LimitRange 指定的范围内
* `99Mi <= 200Mi <= 1Gi` 容器的内存最大限定200Mi在名称空间 LimitRange 指定的范围内
* 没有为CPU/内存指定 request/limit 比例
* 此时容器的定义是有效的,将被创建
## 容器不包含CPU/内存的requests/limits
执行以下命令,查看 `busybox-cnt04` 的配置信息
``` sh
kubectl get po/busybox1 -n limitrange-demo -o json | jq ".spec.containers[3].resources"
```
输出结果如下所示:
```json
{
"limits": {
"cpu": "700m",
"memory": "900Mi"
},
"requests": {
"cpu": "110m",
"memory": "111Mi"
}
}
```
* `busybox` Pod 中的容器 `busybox-cnt04` 既没有定义 request也没有定义 limits
* 由于容器没有定义 limits则名称空间的 LimitRange 定义的 `limits.cpu=700mi` 和 `limits.memory=900Mi` 被注入到该容器
* 由于容器没有定义 requests则名称空间的 LimitRange 定义的 `requests.cpu=110m` 和 `requests.memory=110Mi` 被注入到该容器
* `100m <= 700m <= 800m` 容器的 cpu 最大限定700m在名称空间 LimitRange 指定的范围内
* `99Mi <= 900Mi <= 1Gi` 容器的内存 limit900Mi在名称空间 LimitRange 指定的范围内
* 没有为CPU/内存指定 request/limit 比例
* 此时容器的定义是有效的,将被创建
Pod `busybox` 中所有的容器都通过了名称空间的 LimitRange 检查,此 Pod 将被创建

View File

@ -41,6 +41,9 @@ Kubernetes 对 Pod 进行调度时,以当时集群中各节点的可用资源
```
* 执行以下命令,启动 nfs 服务
```sh
# 创建共享目录,如果要使用自己的目录,请替换本文档中所有的 /root/nfs_root/
mkdir /root/nfs_root
systemctl enable rpcbind
systemctl enable nfs-server

761
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,13 +4,13 @@
"docs:build": "vuepress build ."
},
"devDependencies": {
"@vssue/api-github-v3": "^1.0.3",
"@vssue/vuepress-plugin-vssue": "^1.0.3",
"@vssue/api-github-v4": "^1.2.0",
"@vssue/vuepress-plugin-vssue": "^1.2.0",
"@vuepress/plugin-active-header-links": "^1.0.0-rc.1",
"@vuepress/plugin-back-to-top": "^1.1.0",
"@vuepress/plugin-google-analytics": "^1.1.0",
"@vuepress/plugin-medium-zoom": "^1.1.0",
"@vuepress/plugin-nprogress": "^1.1.0",
"@vuepress/plugin-back-to-top": "^1.2.0",
"@vuepress/plugin-google-analytics": "^1.2.0",
"@vuepress/plugin-medium-zoom": "^1.2.0",
"@vuepress/plugin-nprogress": "^1.2.0",
"babel-plugin-component": "^1.1.1",
"date-fns": "^1.30.1",
"vuepress-plugin-baidu-autopush": "^1.0.1",
@ -20,12 +20,12 @@
"vuepress-plugin-sitemap": "^2.1.2"
},
"dependencies": {
"@vuepress/plugin-pwa": "^1.0.0-rc.1",
"@vuepress/plugin-pwa": "^1.2.0",
"element-ui": "^2.12.0",
"esm": "^3.2.25",
"npm": "^6.11.3",
"reduce-css-calc": "^2.1.6",
"vuepress": "^1.1.0",
"vuepress": "^1.2.0",
"vuepress-plugin-named-chunks": "^1.0.2"
}
}

View File

@ -1,7 +1,7 @@
Kuboard v1.0.x 的更新说明
## v1.0.4-beta.3
## v1.0.4-beta.4
**发布日期**
@ -11,7 +11,7 @@ Kuboard v1.0.x 的更新说明
**优化**
* Secret 填写 docker 地址时,是否要写 http://
* 修改提示:创建 docker 仓库的 Secret --> 填写 docker 仓库地址时,请以 http:// 或 https:// 开头
**BUG 修复**

View File

@ -3,7 +3,7 @@ vssueId: 72
description: 本文描述了Kuboard_v1.0.x的版本变更说明
---
# Kuboardv1.0.x
# Kuboard v1.0.x
<AdSenseTitle/>

127
support/index copy.md Normal file
View File

@ -0,0 +1,127 @@
---
lessAds: true
vssueId: 71
description: Kubernetes教程_本文描述了如何获得Kuboard授权
---
# Kuboard
<AdSenseTitle/>
<script>
export default {
methods: {
mailGroup () {
// console.log('dee')
// window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us20.list-manage.com","uuid":"2273cb19eb20bb1bc5b7745a7","lid":"f1f25d6dac","uniqueMethods":true}) })
}
}
}
</script>
## Kuboard 授权声明
<grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
* 许多网友在问Kuboard收费么
* 使用 Kuboard 是 <font color="red">免费</font> 的,无论您是用于学习还是用于生产
* 将来会推出 Kuboard Plus当前所有的功能将来仍然免费。Kuboard Plus 侧重点:
* 更完善的权限管理(当前只区分集群管理员权限和只读权限)
* 审计日志
* 只要您在本文末尾的评论区留下公司名字,您就已经 **取得将 Kuboard 用于生产环境的授权**
</el-card>
</grid-item>
<grid-item size="1/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
<span style="font-size: 16px; font-weight: 500;">输入邮件地址,可以获得:</span>
* Kubernetes 漏洞及补丁通知
* Kuboard 更新通知
<!-- Begin Mailchimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/horizontal-slim-10_7.css" rel="stylesheet" type="text/css" async>
<style type="text/css">
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; width:100%; text-align: left}
/* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.
We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="https://foxmail.us20.list-manage.com/subscribe/post?u=2273cb19eb20bb1bc5b7745a7&amp;id=f1f25d6dac" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate
style="text-align: left;">
<div id="mc_embed_signup_scroll">
<input style="width: 210px;" type="email" value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="邮件地址" required>
<!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_2273cb19eb20bb1bc5b7745a7_f1f25d6dac" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="订阅" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
</form>
</div>
<!--End mc_embed_signup-->
</el-card>
</grid-item>
</grid>
<!-- <KuboardLiscense></KuboardLiscense> -->
## Kuboard 采纳情况
<div style="padding: 1rem 0;">
<grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; margin-top: 1rem;" shadow="none">
<img src="./index.assets/stars.png" alt="Kubernetes教程_Kuboard_Github_Star">
</el-card>
</grid-item>
<grid-item size="1/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
<li>Kuboard 诞生于大型微服务项目的落地实施,在其发布之前,就已经在许多个实际项目中经受住了考验</li>
<li>Kuboard 于2019年8月初公开发布两个月时间就已经获得了 559 Github Star如图所示当前 <StarCount></StarCount></li>
<li>Kuboard 社群中,已有许多的用户将 Kuboard 用于自己的生产环境</li>
</el-card>
</grid-item>
</grid>
</div>
## Kuboard 商业支持
<div style="padding: 1rem 0;">
<grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
<h3>服务范围</h3>
<li>Kubernetes 企业培训</li>
<li>DevOps 环境搭建及培训</li>
<li>SpringCloud 微服务架构咨询</li>
<li>Kubernetes 投产支持及问题解决</li>
<li>Kuboard 定制化</li>
</el-card>
</grid-item>
<grid-item size="1/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; margin-top: 1rem;" shadow="none">
<h3>联系方式</h3>
<img src="/images/dz2.jpeg" style="width: 200px; margin: auto;"></img>
</el-card>
</grid-item>
</grid>
</div>
<!-- ### 微服务落地咨询
Kuboard 团队提供微服务实施落地的全过程咨询和实施,服务范围:
<p>
<img src="./consulting.png">
</p>
如有需要请加微信:
<p>
<img src="/images/dz2.jpeg" style="width: 200px;"></img>
</p> -->

View File

@ -8,13 +8,44 @@ description: Kubernetes教程_本文描述了如何获得Kuboard授权
<AdSenseTitle/>
<script>
export default {
methods: {
mailGroup () {
// console.log('dee')
// window.dojoRequire(["mojo/signup-forms/Loader"], function(L) { L.start({"baseUrl":"mc.us20.list-manage.com","uuid":"2273cb19eb20bb1bc5b7745a7","lid":"f1f25d6dac","uniqueMethods":true}) })
}
}
}
</script>
## Kuboard 授权声明
<grid :rwd="{compact: 'stack'}">
<grid-item size="2/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
* 许多网友在问Kuboard收费么
* 使用 Kuboard 是 <font color="red">免费</font> 的,无论您是用于学习还是用于生产
* 将来会推出 Kuboard Plus当前所有的功能将来仍然免费。Kuboard Plus 侧重点:
* 更完善的权限管理(当前只区分集群管理员权限和只读权限)
* 审计日志
* 只要您在本文末尾的评论区留下公司名字,您就已经 **取得将 Kuboard 用于生产环境的授权**
</el-card>
</grid-item>
<grid-item size="1/3" :rwd="{tablet: '1/1', compact: '1/1'}">
<el-card style="height: 100%; color: #2c3e50; line-height: 1.7; margin-top: 1rem;" shadow="none">
</el-card>
</grid-item>
</grid>
<!-- <KuboardLiscense></KuboardLiscense> -->
## Kuboard 采纳情况