This commit is contained in:
huanqing.shao
2019-10-12 20:01:03 +08:00
parent a38c2a6712
commit b4a2a48480
170 changed files with 471 additions and 34 deletions

View File

@ -1,5 +1,5 @@
<template>
<div class="adsense-banner">
<div class="adsense-banner" @click="$sendGaEvent('AdSense', 'AdSenseBanner', 'AdSenseBanner')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 正文-横幅 -->
<ins class="adsbygoogle"

View File

@ -0,0 +1,26 @@
<template>
<div class="adsense-left-top" @click="$sendGaEvent('AdSense', 'AdSenseLeftTop', 'AdSenseLeftTop')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- AdsenseLeftTop -->
<ins class="adsbygoogle"
style="display:block;min-width:100px;max-width:500px;width:100%;height:80px"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="4275606991"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</template>
<script>
export default {
}
</script>
<style scoped>
.adsense-left-top {
width: 100%;
/* background-color: grey; */
}
</style>

View File

@ -0,0 +1,29 @@
<template>
<div class="adsense-page-bottom" @click="$sendGaEvent('AdSense', 'AdSensePageBottom', 'AdSensePageBottom')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- AdSensePageBottom -->
<ins class="adsbygoogle"
style="display:inline-block;min-width:200px;max-width:1000px;width:100%;height:180px"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="9035294879"
></ins>
<!-- data-ad-format="auto"
data-full-width-responsive="false" -->
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</template>
<script>
export default {
}
</script>
<style scoped>
.adsense-page-bottom {
/* padding-right: 2px; */
border: 1px solid #d7dae2;
}
</style>

View File

@ -0,0 +1,27 @@
<template>
<div class="adsense-page-bottom-inline">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- PageBottomInline -->
<ins class="adsbygoogle"
style="display:inline-block;min-width:200px;max-width:1000px;width:100%;height:160px"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="8977269331"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</template>
<script>
export default {
}
</script>
<style scoped>
.adsense-page-bottom-inline {
border: 1px solid #d7dae2;
height: 160px;
overflow: hidden;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="adsense-page-top">
<div class="adsense-page-top" @click.capture="$sendGaEvent('AdSense', 'AdSensePageTop', 'AdSensePageTop')">
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
@ -32,6 +32,10 @@ export default {
<style scoped>
.adsense-page-top {
/* background-color: green; */
opacity: 0.2;
cursor: pointer;
padding-right: 2px;
border: 1px solid #d7dae2;
height: 124px !important;
overflow: hidden;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="adsense-paragraph">
<div class="adsense-paragraph" @click="$sendGaEvent('AdSense', 'AdSenseParagraph', 'AdSenseParagraph')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block; text-align:center;"
@ -22,5 +22,7 @@ export default {
<style scoped>
.adsense-paragraph {
/* background-color: grey; */
padding-right: 2px;
border: 1px solid #d7dae2;
}
</style>

View File

@ -1,13 +1,14 @@
<template>
<div class="adsense-right">
<div class="adsense-right" @click="$sendGaEvent('AdSense', 'AdSenseRightSide', 'AdSenseRightSide')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 右侧垂直 -->
<ins class="adsbygoogle"
style="display:block"
style="display:block; height: 40vh; max-width: calc(50vw - 720px); min-width: 200px;"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="2638666669"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
></ins>
<!-- data-ad-format="auto"
data-full-width-responsive="true" -->
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
@ -28,11 +29,11 @@ export default {
.adsense-right {
width: 500px;
max-width: calc(50vw - 690px);
height: 50vh;
max-width: calc(50vw - 720px);
height: 40vh;
position: fixed;
top: 10vh;
right: 0.2rem;
bottom: 80px;
right: 10px;
/* background-color: grey; */
}

View File

@ -1,5 +1,5 @@
<template>
<div>
<div @click="$sendGaEvent('AdSense', 'AdSenseSquare', 'AdSenseSquare')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 正方形-正文 -->
<ins class="adsbygoogle"

View File

@ -0,0 +1,35 @@
<template>
<div class="adsense-under-title" @click="$sendGaEvent('AdSense', 'AdSensePageTopUnderTitle', 'AdSensePageTopUnderTitle')">
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> -->
<!-- PageTopUnderTitle -->
<!-- <ins class="adsbygoogle"
style="display:inline-block;min-width:200px;max-width:1000px;width:100%;height:50px"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="1677363818"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script> -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-format="fluid"
data-ad-layout-key="-i0-3+1f-3d+2z"
data-ad-client="ca-pub-3313149841665250"
data-ad-slot="3534684042"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</template>
<script>
export default {
}
</script>
<style scoped>
.adsense-under-title {
border: 1px solid #d7dae2;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div>
<div @click="$sendGaEvent('AdSense', 'AdSenseVertical', 'AdSenseVertical')">
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- 正文-垂直 -->
<ins class="adsbygoogle"

View File

@ -31,4 +31,18 @@ export default ({
tablet: '719px 959px'
}
})
Vue.prototype.$sendGaEvent = function (category, action, label) {
let e = {
hitType: 'event',
eventCategory: category,
eventAction: action,
eventLabel: label
}
if (window.ga) {
window.ga('send', e);
// console.log('openOutboundLink Event', e)
} else {
console.log('开发环境,不发送 ga event', e)
}
}
}

View File

@ -24,6 +24,7 @@
<a href="/learning/">
<span style="color: #42b983;">提供K8S免费教程</span>
</a>
<a href="https://webscan.qianxin.com/safe/detail/?query=kuboard.cn"><img border="0" src="https://webscan.qianxin.com/api/authcode?code=ab3ebe0592248d28477251ecaf72154f" style="display: none;"/></a>
<!-- <span style="color: #2c3e50;">|</span>
<a href="/support/#%E5%BE%AE%E6%9C%8D%E5%8A%A1%E8%90%BD%E5%9C%B0%E5%92%A8%E8%AF%A2">
<span style="color: #007af5;">微服务落地咨询</span>

View File

@ -1,13 +1,16 @@
<template>
<main class="page">
<div class="page-nav" style="max-width: 1000px; margin-top: 56px;">
<AdSensePageTop></AdSensePageTop>
<!-- <AdSensePageTop></AdSensePageTop> -->
</div>
<!-- <AdsenseParagraph></AdsenseParagraph> -->
<slot name="top"/>
<Content class="theme-default-content" style="padding-top: 0; margin-top: 0;"/>
<Content class="theme-default-content" style="padding-top: 0; margin-top: 0; padding-bottom: 1rem;"/>
<div class="page-nav" style="max-width: 1000px; padding-top:0;">
<AdSensePageBottomInline/>
</div>
<!-- <el-divider>加入 Kuboard 社群</el-divider> -->
<div style="margin: auto; width: 182px;">
@ -77,7 +80,6 @@
</span>
</p>
<AdSenseParagraph></AdSenseParagraph>
</div>
<div>
</div>

View File

@ -1,12 +1,13 @@
<template>
<aside class="sidebar">
<AdSenseLeftTop />
<slot name="top"/>
<SidebarLinks :depth="0" :items="items"/>
<slot name="bottom"/>
<div style="text-align: center; margin-top: 5vh;">
<a target="_blank" :href="`http://demo.kuboard.cn/#/dashboard?k8sToken=${$site.themeConfig.kuboardToken}`">
<!-- <a target="_blank" :href="`http://demo.kuboard.cn/#/dashboard?k8sToken=${$site.themeConfig.kuboardToken}`">
<img style="width: 242px; border: 1px solid #d7dae2;" src="/images/logo-main.png" alt="Kuboard_快速在Kubernetes上落地微服务"/>
</a>
</a> -->
<p>
<strong>
@ -20,11 +21,11 @@
</div>
<p>
</p>
<strong>在线答疑</strong>
<!-- <strong>在线答疑</strong>
<Qq/>
<p>
<img src="/images/kuboard_qq.png" style="width: 120px;" alt="Kubernetes教程QQ群在线答疑"/>
</p>
</p> -->
</div>
<el-divider >Kuboard</el-divider>
<div style="height: 2rem;"></div>

View File

@ -35,7 +35,7 @@
<div style="display: inline-block; vertical-align: top;">
<li><span style="color: red; font-weight: 500;">免费</span> Kubernetes 教程绝不降低品质</li>
<!-- <li><span style="color: red; font-weight: 500;">在线答疑</span> 扫第一个二维码完成打赏扫第二个进微信群聊</li> -->
<li><Qq></Qq> <span style="color: red; font-weight: 500;">在线答疑</span>也可以扫描左侧导航<span style="color: red; font-weight: 500;">下方</span>的二维码加群</li>
<li><Qq></Qq> <span style="color: red; font-weight: 500;">在线答疑</span>也可以扫描本文末尾的二维码加群</li>
<!-- <li>根据答疑反馈<span style="color: red; font-weight: 500;">不断完善</span> 教程</li> -->
</div>

View File

@ -5,6 +5,8 @@ description: 熟悉Kuboard_on_Kubernetes_的最佳途径。
# 使用手册
<AdSenseTitle/>
**Kuboard 的设计目标**
* 降低 Kubernetes 学习门槛,让初学者先把 Kubernetes 用起来,再逐步理解 Kubernetes 中的各种概念

View File

@ -8,6 +8,8 @@ meta:
# 计算资源管理
<AdSenseTitle/>
## 前提
必须具备如下条件:

View File

@ -5,6 +5,8 @@ description: 使用Kuboard管理Kubernetes名称空间。
# 名称空间管理
<AdSenseTitle/>
## 创建名称空间
### 前提

View File

@ -5,6 +5,8 @@ description: 使用Kuboard管理Kubernetes存储类StorageClass
# 存储空间管理
<AdSenseTitle/>
## 创建存储类
前提

View File

@ -4,6 +4,8 @@ description: 使用Kuboard监听Kubernetes集群的最新事件_并通过这些
# 集群事件
<AdSenseTitle/>
通过观察 Kuberetes 集群事件,可以快速诊断部署时发生的问题。
Kuboard 建立了与 kubernetes apiserver 的长连接,可以在第一时间将集群中的事件更新以通知的形式显示在 dashboad 上。

View File

@ -4,7 +4,7 @@ description: 使用Kuboard打开并跟踪容器组的最新日志以便对Kub
# 日志及终端
<AdSenseTitle/>
# 日志

View File

@ -4,6 +4,8 @@ description: 使用Kuboard对Kubernetes上容器组的端口进行转发。
# 端口转发
<AdSenseTitle/>
微服务环境中,各个服务都通过 TCP / UDP 端口的形式提供访问。按调用者所在位置、通信协议的形式来划分,大致有如下几种情况:
| 调用者所在位置 | 通信协议 | 临时性 | 常见场景 | 推荐配置方式 |

View File

@ -5,6 +5,8 @@ description: 使用Kuboard向Kubernetes部署一个最简单的Deployment
# 部署 busybox
<AdSenseTitle/>
## 前提
必须具备如下条件:

View File

@ -5,6 +5,8 @@ description: 通过Kuboard将一个预先定义好的SpringCloud微服务样例
# 导入 example 微服务
<AdSenseTitle/>
## 前提
必须具备如下条件:

View File

@ -5,6 +5,8 @@ description: 使用Kuboard在Kubernetes上安装监控套件并对example微
# 监控 example <Badge text="alpha" type="warn"/>
<AdSenseTitle/>
## 前提
必须具备如下条件:

View File

@ -4,6 +4,8 @@ description: Kuboard中的Kubernetes监控套件
# 监控套件 <Badge text="alpha" type="warn"/>
<AdSenseTitle/>
作者已经在自己的多个项目中使用了监控套件,但是由于在使用时,需要针对具体的项目做少量的定制,因此,监控套件目前还处于 alpha 状态。
监控套件分全局监控套件和局部监控套件两种类型:

View File

@ -4,6 +4,8 @@ description: 如何基于KuboardAPI实现自定义的Kubernetes监控套件
# 自定义监控套件 <Badge text="alpha" type="warn"/>
<AdSenseTitle/>
文档建设中...
> * 请参考 [监控 example](/guide/example/monitor.html) <Badge text="alpha" type="warn"/> 体验 Kuboard 在监控套件方面的设想

View File

@ -4,7 +4,7 @@ description: 使用Kuboard对Kubernetes 行日常调整_包括_批量删除容
# 日常调整
<AdSenseTitle/>
## 前提

View File

@ -4,6 +4,8 @@ description: 使用Kuboard配置Kubernetes_ConfigMap
# 配置ConfigMap
<AdSenseTitle/>
配置: Kubernetes ConfigMap
# 查看配置列表

View File

@ -4,6 +4,8 @@ description: 使用Kuboard将Kubernetes名称空间中安装的应用程序配
# 多环境
<AdSenseTitle/>
在实际开发项目的过程中,我们必然会碰到如下场景:
1. 创建一个开发环境,并在其中完成应用部署

View File

@ -4,6 +4,8 @@ description: 使用Kuboard配置Kubernetes的存储卷声明Persistent_Volume_Cl
# 存储卷声明
<AdSenseTitle/>
存储卷声明: Kubernetes Persistent Volume Claim

View File

@ -4,7 +4,7 @@ description: 使用Kuboard配置Kubernetes_Secrets
# Secrets
<AdSenseTitle/>
# 查看 Secrets 列表

View File

@ -4,7 +4,7 @@ description: Kuboard_on_Kubernetes_工作负载编辑器_无需编写YAML文件
# 工作负载
<AdSenseTitle/>
## 创建/查看/编辑工作负载

View File

@ -8,6 +8,8 @@ meta:
# 配置Kubectl
<AdSenseTitle/>
> 参考文档: Kubernetes官网文档 [Organizing Cluster Access Using kubeconfig Files](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)、[Configure Access to Multiple Clusters](https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)
`kubectl` 命令行工具从配置文件kubeconfig中查找用于调用 API Server 接口的信息:

View File

@ -4,6 +4,8 @@ description: 使用 kubeadm 安装 Kubernetes v1.15.1 的集群单Master节
# 最值得参考的 Kubernetes 安装文档在这里
<AdSenseTitle/>
## 文档特点
**网上那么多 Kubernetes 安装文档,为什么这篇文档更有参考价值?**

View File

@ -4,6 +4,8 @@ description: Kubernetes 最新稳定版 v1.15.2 的快速安装文档。该文
# 最值得参考的 Kubernetes 安装文档在这里
<AdSenseTitle/>
## 文档特点
**网上那么多 Kubernetes 安装文档,为什么这篇文档更有参考价值?**

View File

@ -25,6 +25,8 @@ storyBook:
# 使用 kubeadm 安装 kubernetes v1.15.3
<AdSenseTitle/>
<script>
export default {

View File

@ -26,6 +26,8 @@ storyBook:
# 使用 kubeadm 安装 kubernetes v1.15.4
<AdSenseTitle/>
<script>
export default {

View File

@ -29,6 +29,8 @@ meta:
# 使用kubeadm安装kubernetes_v1.16.0
<AdSenseTitle/>
<script>
export default {

View File

@ -8,6 +8,8 @@ meta:
# 升级Kuboard
<AdSenseTitle/>
## 最新版本
[查看最新版本及更新日志](/support/change-log/v1.0.x.html)

View File

@ -22,6 +22,8 @@ meta:
# 安装Kuboard
<AdSenseTitle/>
<!-- <StoryBook>
<div slot="overview"> -->

View File

@ -8,6 +8,8 @@ meta:
# 安装Kubernetes测试集群Win_Mac
<AdSenseTitle/>
只需要一台笔记本/台式机,就可以拥有一台用于学习的 Kubernetes 集群。单台机器可以用于学习 Kubernetes但是单台机器始终玩不出集群的感觉...
## 前提

View File

@ -8,6 +8,8 @@ meta:
# 安装Kubernetes Dashboard
<AdSenseTitle/>
> 参考文档: [Web UI (Dashboard)](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)
Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard您可以

View File

@ -8,6 +8,8 @@ meta:
# Kubernetes爆发严重漏洞_可能影响所有开源版本_请尽快升级
<AdSenseTitle/>
参考文档Info Q 文章 [Kubernetes 爆发严重漏洞:可能影响所有开源版本](https://www.infoq.cn/article/2lxylPOCU4cf9MR2S5fp)
参考文档51CTO 安全频道 [Kubernetes的严重漏洞将所有服务器暴露在DoS攻击面前!](http://netsecurity.51cto.com/art/201908/601671.htm)

View File

@ -29,6 +29,8 @@ meta:
# 使用kubeadm安装kubernetes_v1.16.1
<AdSenseTitle/>
<script>
export default {

View File

@ -9,6 +9,8 @@ meta:
# 安装Kubectl
<AdSenseTitle/>
日常工作中,您可能需要在自己的笔记本电脑上执行 kubectl 命令以管理远程 Linux 服务器上的 Kubernetes 集群。
::: tip

View File

@ -26,6 +26,8 @@ meta:
# 安装Kubernetes高可用
<AdSenseTitle/>
<!-- <StoryBook>
<div slot="overview"> -->

View File

@ -8,6 +8,8 @@ meta:
# K8S从1.15.x升级到 1.15.4
<AdSenseTitle/>
参考文档: kubernetes 官网文档 [kubeadm upgrade](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/)

View File

@ -8,6 +8,8 @@ meta:
# K8S从1.15.x(1.16.x)升级到 1.16.x
<AdSenseTitle/>
参考文档: kubernetes 官网文档 [kubeadm upgrade](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-upgrade/)
本文描述了如何从 kubernetes v1.15.x或1.16.x升级到 Kubernetes v1.16.y前提是您的 Kubernetes 集群是使用 kubeadm 安装的。
@ -52,6 +54,10 @@ yum list --showduplicates kubeadm --disableexcludes=kubernetes
```
执行命令 `kubeadm version`,以验证升级结果
::: danger 替换 1.16.x 中的 x
本文中,所有碰到 1.16.x 的地方,都要将其中的 x 替换为您前面查询到的最新补丁号
:::
* 在第一个 master 节点上执行命令 `kubeadm upgrade plan`,输出结果如下所示:
``` {9,24,25,26,27,28,29}

View File

@ -10,6 +10,8 @@ meta:
# Kubernetes免费中文教程
<AdSenseTitle/>
本教程的主要依据是Kubernetes 官网文档,以及使用 Kubernetes 落地 Spring Cloud 微服务并投产的实战经验。适用人群:
* Kubernetes 初学者

View File

@ -6,6 +6,8 @@ description: Kubernetes教程_高级篇_主要涉及日志采集_安全_监控_
# Kubernetes教程深入篇
<AdSenseTitle/>
Kubernetes教程的深入篇部分主要涉及的内容有如下几个方面
* [问题诊断](./ts/application.html)

View File

@ -9,6 +9,8 @@ meta:
# 基本的日志
<AdSenseTitle/>
本章节中,您将了解到如何在 Kubernetes 中使用最基本的日志此时日志信息将输出到标准输出流standard output stream。请参考下面的例子该例子中的 Pod 包含一个容器,该容器每秒钟向标准输出写入一些文本内容:
<<< @/.vuepress/public/statics/learning/logs/counter-pod.yaml

View File

@ -9,6 +9,8 @@ meta:
# 集群级别的日志
<AdSenseTitle/>
Kubernetes 中并不默认提供集群级别的日志,不过,有许多种途径可以和集群级别的日志整合。例如:
* 在每个节点上配置日志代理
* 在应用程序的 Pod 中包含一个专门用于收集日志的 sidecar 容器

View File

@ -9,4 +9,6 @@ meta:
# 使用ELK作为集群级别的日志
<AdSenseTitle/>
待更新 ...

View File

@ -9,6 +9,8 @@ meta:
# 日志架构
<AdSenseTitle/>
> 参考文档: [Logging Architecture](https://kubernetes.io/docs/concepts/cluster-administration/logging/)
当集群中出现任何问题时应用程序日志和系统日志是非常有效的定位问题的手段可以让我们知道集群中正在发生的事情。绝大多数的应用程序都有日志机制主流的容器引擎也都支持某种形式的日志。对容器化应用程序来说最简单也是被采纳得最多的一种日志方式是将日志写入到标准输出流例如Java中的 `System.out.println` 语句,或 log4j 中的 Console Appender和标准错误流里例如Java中的 `System.error.println` 语句)

View File

@ -9,6 +9,8 @@ meta:
# 节点级别的日志
<AdSenseTitle/>
## 日志存储
![Kubernetes_教程_节点级别的日志](./node.assets/logging-node-level.png)

View File

@ -9,6 +9,8 @@ meta:
# 调度
<AdSenseTitle/>
> 参考文档: [Kubernetes Scheduler](https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/)
在Kubernetes中调度Scheduling指的是为 Pod 找到一个合适的节点,并由该节点上的 kubelet 运行 Pod。

View File

@ -9,6 +9,8 @@ meta:
# 诊断应用程序
<AdSenseTitle/>
> 参考文档: [Troubleshoot Applications](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application/)
本文档可帮助您诊断部署到Kubernetes中的应用程序所出现的问题。如果仍然解决不了请加本文末尾的QQ群答疑。也可以了解 [更多支持方式](/support/)

View File

@ -9,6 +9,8 @@ meta:
# 诊断集群问题
<AdSenseTitle/>
> 参考文档:[Troubleshoot Clusters](https://kubernetes.io/docs/tasks/debug-application-cluster/debug-cluster/)
本文主要是关于如何诊断集群出现的问题,此时,假设您已经经过排查,确认当前碰到问题的 root cause问题的根源不是应用程序的问题。参考 [诊断应用程序](./application.html)。

View File

@ -9,6 +9,8 @@ meta:
# 1.部署一个应用程序
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Using kubectl to Create a Deployment](https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/) ,并有所改写
### 前提

View File

@ -9,6 +9,8 @@ meta:
# 2.查看Pods/Nodes
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Viewing Pods and Nodes](https://kubernetes.io/docs/tutorials/kubernetes-basics/explore/explore-intro/) ,并有所改写
## 目标

View File

@ -9,6 +9,8 @@ meta:
# 3.公布应用程序
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Using a Service to Expose Your App](https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/) ,并有所改写
## 目标

View File

@ -9,6 +9,8 @@ meta:
# 6.复习Kubernetes核心概念
<AdSenseTitle/>
> 转载信息:
>
> 译者:崔婧雯

View File

@ -9,6 +9,8 @@ meta:
# 0.学习Kubernetes基础知识
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Learn Kubernetes Basics](https://kubernetes.io/docs/tutorials/kubernetes-basics/) ,并有所改写
相信很多初学者在入门 Kubernetes (以下简称k8s)时,都会被各种英文单词所困扰(例如Deployment、Pod、Service等)这些名词在被翻译后也往往失去了原意更不能体现出他们的相互关系。笔者在刚开始学习k8s时也遭遇到这种困境。但是任何复杂的系统都是发源于最基本的公式或定理k8s虽然庞大且复杂不过只要抓住一些基本的脉络(一些最基本的组件的定义及使用),入门便也是毫不费劲。

View File

@ -9,6 +9,8 @@ meta:
# 4.伸缩应用程序
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Running Multiple Instances of Your App](https://kubernetes.io/docs/tutorials/kubernetes-basics/scale/scale-intro/) ,并有所改写
## 目标

View File

@ -9,6 +9,8 @@ meta:
# 5.执行滚动更新
<AdSenseTitle/>
本文翻译自 Kubernetes 官网 [Performing a Rolling Update](https://kubernetes.io/docs/tutorials/kubernetes-basics/update/update-intro/) ,并有所改写
## 目标

View File

@ -10,6 +10,8 @@ meta:
# Master to Cluster
<AdSenseTitle/>
从 masterapiserver到Cluster存在着两条主要的通信路径
* apiserver 访问集群中每个节点上的 kubelet 进程
* 使用 apiserver 的 proxy 功能,从 apiserver 访问集群中的任意节点、Pod、Service

View File

@ -9,6 +9,8 @@ meta:
# Cluster to Master
<AdSenseTitle/>
所有从集群访问 Master 节点的通信,都是针对 apiserver 的(没有任何其他 master 组件发布远程调用接口)。通常安装 Kubernetes 时apiserver 监听 HTTPS 端口443并且配置了一种或多种 [客户端认证方式 authentication](https://kubernetes.io/docs/reference/access-authn-authz/authentication/)。至少需要配置一种形式的 [授权方式 authorization](https://kubernetes.io/docs/reference/access-authn-authz/authorization/),尤其是 [匿名访问 anonymous requests](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#anonymous-requests) 或 [Service Account Tokens](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#service-account-tokens) 被启用的情况下。
节点上必须配置集群apiserver的公钥根证书public root certificate此时在提供有效的客户端身份认证的情况下节点可以安全地访问 APIServer。例如在 Google Kubernetes Engine 的一个默认 Kubernetes 安装里,通过客户端证书为 kubelet 提供客户端身份认证。请参考 [kubelet TLS bootstrapping](https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/),了解如何自动为 kubelet 提供客户端证书。

View File

@ -9,6 +9,8 @@ meta:
# Master-Node之间的通信
<AdSenseTitle/>
本文描述了Kubernetes集群和Master节点实际上是 apiserver之间的通信路径。用户在自定义集群的安装之前或者调整集群的网络配置之前必须理解这部分内容。例如
* 从 [安装Kubernetes单Master节点](/install/install-k8s.html) 的安装结果调整到 [安装Kubernetes高可用](/install/install-kubernetes.html) 的安装结果
* 将公网 IP 地址上的机器作为节点加入到 Kubernetes 集群

View File

@ -9,6 +9,8 @@ meta:
# 控制器
<AdSenseTitle/>
在机器人技术和自动化技术中,**控制循环** 是一个控制系统状态的无限循环。房间里的恒温器就是**控制循环**的一个例子
* 在恒温器上设定好目标温度,就是在告诉该 **控制循环** 你想要的 ***目标状态***。

View File

@ -9,6 +9,8 @@ meta:
# 节点管理
<AdSenseTitle/>
与 Pod 和 Service 不一样,节点并不是由 Kubernetes 创建的节点由云供应商例如Google Compute Engine、阿里云等创建或者节点已经存在于您的物理机/虚拟机的资源池。向 Kubernetes 中创建节点时,仅仅是创建了一个描述该节点的 API 对象。节点 API 对象创建成功后Kubernetes将检查该节点是否有效。例如假设您创建如下节点信息
``` yaml

View File

@ -9,6 +9,8 @@ meta:
# 节点
<AdSenseTitle/>
Kubernetes中节点node指的是一个工作机器曾经叫做 `minion`。不同的集群中,节点可能是虚拟机也可能是物理机。每个节点都由 master 组件管理,并包含了运行 Pod容器组所需的服务。这些服务包括
* [容器引擎](/learning/k8s-bg/component.html#容器引擎)
* kubelet

View File

@ -9,6 +9,8 @@ meta:
# Kubernetes组件
<AdSenseTitle/>
> 参考文档: [Kubernetes Components](https://kubernetes.io/docs/concepts/overview/components/)
本文档描述了 Kubernetes 的主要组件。

View File

@ -9,6 +9,8 @@ meta:
# Kubernetes介绍
<AdSenseTitle/>
> 参考文档: [What is Kubernetes](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/)
Kubernetes是一个可以移植、可扩展的开源平台使用 [声明式的配置](/learning/k8s-intermediate/workload/wl-deployment/#deployment-概述) 并依据配置信息自动地执行容器化应用程序的管理。在所有的容器编排工具中(类似的还有 docker swarm / mesos等Kubernetes的生态系统更大、增长更快有更多的支持、服务和工具可供用户选择。

View File

@ -9,6 +9,8 @@ meta:
# 将容器组调度到指定的节点
<AdSenseTitle/>
参考文档: Kubernetes 官网 [Assigning Pods to Nodes](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/)
## 概述

View File

@ -9,6 +9,8 @@ meta:
# 管理容器的计算资源
<AdSenseTitle/>
参考文档: Kubernetes 官网 [Managing Compute Resources for Containers](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
## 概述

View File

@ -9,6 +9,8 @@ meta:
# 使用ConfigMap配置您的应用程序
<AdSenseTitle/>
本文参考了 Kubernetes 官网 [Configure a Pod to Use a ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap),并有所改写
Kubernetes ConfigMap 可以将配置信息和容器镜像解耦,以使得容器化的应用程序可移植。本文提供了一系列的实例,解释如何通过 Kuboard 创建 ConfigMap 以及如何使用 ConfigMap 中的数据配置 Pod容器组

View File

@ -9,6 +9,8 @@ meta:
# 为容器设置Linux Capabilities
<AdSenseTitle/>
使用 [Linux Capabilities](http://man7.org/linux/man-pages/man7/capabilities.7.html) 可以为容器内的进程授予某些特定的权限(而不是 root 用户的所有权限)。在容器定义的 `securityContext` 中添加 `capabilities` 字段,可以向容器添加或删除 Linux Capability。
本文后续章节中,先运行一个不包含 `capabilities` 字段的容器,观察容器内进程的 linux capabilities 位图的情况;然后在运行一个包含 `capabilities` 字段的容器,比较其 linux capabilities 位图与前者的不同。

View File

@ -9,6 +9,8 @@ meta:
# Kuboard中容器的Security Context
<AdSenseTitle/>
通过 Kuboard可以直接设定 Deployment、StatefulSet、DaemonSet 等中容器的 securityContext 的内容。在 Kuboard 工作负载编辑器界面中点击 **容器组的更多设定** 按钮,可查看到容器的 Security Context 设置界面,如下图所示:
![Kubernetes教程_Kuboard中设置容器的SecurityContext](./con-kuboard.assets/image-20191005230605496.png)
@ -28,4 +30,3 @@ meta:
| procMount | string | procMount 代表了容器的 proc mount 的类型。默认值是 `DefaultProcMount`(使用容器引擎的默认值)。该字段需要激活 Kubernetes 的ProcMountType 特性 |
| capabilities | <div style="width: 80px;">add: array<br />drop: array</div> | 为容器进程 add/drop Linux capabilities。默认使用容器引擎的设定。更多内容请参考 [为容器设置Linux Capabilities](./con-cap.html) |
| seLinuxOptions | | 此字段设定的 SELinux 上下文将被应用到 Pod 中所有容器。如果不指定,容器引擎将为每个容器分配一个随机的 SELinux 上下文。<font color="grey">也可以在Pod的SecurityContext中设定如果 Pod 和容器的 securityContext 中都设定了这个字段,则对该容器来说以容器中的设置为准。</font> |

View File

@ -9,6 +9,8 @@ meta:
# 为容器设置SELinux标签
<AdSenseTitle/>
Pod 或容器定义的 `securityContext``seLinuxOptions` 字段是一个 [SELinuxOptions](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#selinuxoptions-v1-core) 对象,该字段可用于为容器指定 SELinux 标签。如下所示:
``` yaml

View File

@ -9,6 +9,8 @@ meta:
# 为容器设置Security Context
<AdSenseTitle/>
容器的定义中包含 `securityContext` 字段,该字段接受 [SecurityContext](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.16/#securitycontext-v1-core) 对象。通过指定该字段,可以为容器设定安全相关的配置,当该字段的配置与 Pod 级别的 `securityContext` 配置相冲突时,容器级别的配置将覆盖 Pod 级别的配置。容器级别的 `securityContext` 不影响 Pod 中的数据卷。
下面的示例中的 Pod 包含一个 Container且 Pod 和 Container 都有定义 `securityContext` 字段:

View File

@ -10,6 +10,8 @@ meta:
# 概述
<AdSenseTitle/>
> 参考文档Kubernetes 官网文档 [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#assign-selinux-labels-to-a-container)
Security Context安全上下文用来限制容器对宿主节点的可访问范围以避免容器非法操作宿主节点的系统级别的内容使得节点的系统或者节点上其他容器组受到影响。

View File

@ -9,6 +9,8 @@ meta:
# Kuboard中Pod的Security Context
<AdSenseTitle/>
通过 Kuboard可以直接设定 Deployment、StatefulSet、DaemonSet 等中 Pod 模板的 securityContext 的内容。在 Kuboard 工作负载编辑器界面中点击 **容器组的更多设定** 按钮,可查看到 Pod 的 Security Context 设置界面,如下图所示:
![Kubernetes教程_Kuboard中Pod的SecurityContext](./pod-kuboard.assets/image-20191004221427371.png)

View File

@ -9,6 +9,8 @@ meta:
# 为Pod设置Security Context
<AdSenseTitle/>
在 Pod 的定义中增加 `securityContext` 字段,即可为 Pod 指定 Security 相关的设定。 `securityContext` 字段是一个 [PodSecurityContext](./pod-kuboard.html) 对象。通过该字段指定的内容将对该 Pod 中所有的容器生效。
## Pod示例

View File

@ -9,6 +9,8 @@ meta:
# 关于数据卷
<AdSenseTitle/>
Pod 的 securityContext 作用于 Pod 中所有的容器,同时对 Pod 的数据卷也同样生效。具体来说,`fsGroup``seLinuxOptions` 将被按照如下方式应用到 Pod 中的数据卷:
* `fsGroup`:对于支持 ownership 管理的数据卷,通过 `fsGroup` 指定的 GID 将被设置为该数据卷的 owner并且可被 `fsGroup` 写入。更多细节请参考 [Ownership Management design document](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/storage/volume-ownership-management.md)
* `seLinuxOptions`:对于支持 SELinux 标签的数据卷,将按照 `seLinuxOptions` 的设定重新打标签,以使 Pod 可以访问数据卷内容。通常您只需要设置 `seLinuxOptions``level` 这一部分内容。该设定为 Pod 中所有容器及数据卷设置 [Multi-Category Security (MCS)](https://selinuxproject.org/page/NB_MLS) 标签。

View File

@ -9,6 +9,8 @@ meta:
# 创建Secret使用Generator
<AdSenseTitle/>
从 kubernetes v1.14 开始kubectl 集成了 [Kustomize](https://kustomize.io/)。通过 Kustomize您可以使用 generatorKustomize 的概念)创建 Secret并保存到 API Server。Generator 必须在 `kustomization.yaml` 文件中指定。
::: tip

View File

@ -9,6 +9,8 @@ meta:
# 创建Secret使用kubectl
<AdSenseTitle/>
假设某个 Pod 需要访问数据库。在您执行 kubectl 命令所在机器的当前目录,创建文件 `./username.txt` 文件和 `./password.txt` 暂存数据库的用户名和密码,后续我们根据这两个文件配置 kubernetes secrets。
```sh

View File

@ -9,6 +9,8 @@ meta:
# 创建Secret使用Kuboard
<AdSenseTitle/>
本文简要描述如何在 Kuboard 中创建 Kubernetes Secret。
Kubernetes Secret 必须从属于某一个名称空间,进入 Kuboard 名称空间界面Secret 列表在名称空间的左上角。如下图所示:

View File

@ -9,6 +9,8 @@ meta:
# 创建Secret手动
<AdSenseTitle/>
和创建其他类型的 API 对象Pod、Deployment、StatefulSet、ConfigMap 等)一样,您也可以先在 yaml 文件中定义好 Secret然后通过 `kubectl apply -f` 命令创建。此时,您可以通过如下两种方式在 yaml 文件中定义 Secret
* **data**:使用 data 字段时,取值的内容必须是 base64 编码的
* **stringData**:使用 stringData 时,更为方便,您可以直接将取值以明文的方式写在 yaml 文件中

View File

@ -9,6 +9,8 @@ meta:
# 解码和编辑Secret
<AdSenseTitle/>
## 解码Secret
Secret 中的信息可以通过 `kubectl get secret` 命令获取。例如,执行命令 `kubectl get secret mysecret -o yaml

View File

@ -9,6 +9,8 @@ meta:
# Secret概述
<AdSenseTitle/>
参考文档: Kubernetes 官网文档 [Secrets](https://kubernetes.io/docs/concepts/configuration/secret/)
## 概述

View File

@ -9,7 +9,7 @@ meta:
# 使用Secret存储Ingress TLS证书
<AdSenseTitle/>
可以直接在 Ingress 中配置 HTTPS 证书,使得你的网站支持 HTTPS 协议。

View File

@ -10,6 +10,8 @@ meta:
# 概述
<AdSenseTitle/>
> 参考文档: Kubernetes 官网文档 [Taints and Tolerations](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
Pod 中存在属性 [Node selector / Node affinity](/learning/k8s-intermediate/config/assign-pod-node.html),用于将 Pod 指定到合适的节点。

View File

@ -10,6 +10,8 @@ meta:
# 基于污点的驱逐TaintBasedEviction
<AdSenseTitle/>
在前面的章节中,我们描述了 [NoExecute](/learning/k8s-intermediate/config/taints-toleration/#污点与容忍的匹配) 的污点效果,该效果将对已经运行在节点上的 Pod 施加如下影响:
* 不容忍该污点的 Pod 将立刻被驱逐
* 容忍该污点的 Pod 在未指定 `tolerationSeconds` 的情况下,将继续在该节点上运行

View File

@ -10,6 +10,8 @@ meta:
# 条件化的污点TaintNodesByCondition
<AdSenseTitle/>
自 Kubernetes 1.12 开始,`TaintNodesByCondition` 这个特性进入 beta 阶段,此时节点控制器自动根据 Node Condition 为节点创建对应的污点。调度器则不去检查 Node conditions而是检查节点的污点因此 Node Condition 不再直接影响到调度程序。用户通过为 Pod 添加容忍,可以选择性地忽略节点的某些问题(以 Node Condition 呈现的问题)。
`TaintNodesByCondition` 这个特性只会为节点添加 `NoSchedule` 效果的污点。`TaintBasedEviction` Kubernetes 1.13 开始默认生效)则为节点添加 `NoExecute` 效果的污点,参考 [TaintBasedEviction](./taint-based-evictions.html)。

View File

@ -10,6 +10,8 @@ meta:
# 使用案例
<AdSenseTitle/>
污点和容忍使用起来非常灵活,可以用于:
* 避免 Pod 被调度到某些特定的节点
* 从节点上驱逐本不应该在该节点运行的 Pod

View File

@ -9,6 +9,8 @@ meta:
# 容器的环境变量
<AdSenseTitle/>
> 参考文档: [Container Environment Variables](https://kubernetes.io/docs/concepts/containers/container-environment-variables/)
Kubernetes为容器提供了一系列重要的资源

View File

@ -9,6 +9,8 @@ meta:
# 容器镜像
<AdSenseTitle/>
在 Kubernetes 的 Pod 中使用容器镜像之前,您必须将其推送到一个镜像仓库(或者使用仓库中已经有的容器镜像)。在 Kubernetes 的 Pod 定义中定义容器时,必须指定容器所使用的镜像,容器中的 `image` 字段支持与 `docker` 命令一样的语法,包括私有镜像仓库和标签。
例如:`my-registry.example.com:5000/example/web-example:v1.0.1` 由如下几个部分组成:

View File

@ -9,6 +9,8 @@ meta:
# 容器生命周期事件处理
<AdSenseTitle/>
> 参考文档: [Attach Handlers to Container Lifecycle Events](https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/)
Kubernetes 中支持容器的 postStart 和 preStop 事件本文阐述了如何向容器添加生命周期事件处理程序handler

View File

@ -9,6 +9,8 @@ meta:
# 容器生命周期
<AdSenseTitle/>
> 参考文档: [Container Lifecycle Hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/)
本文描述了 kubelet 管理的容器如何使用容器生命周期钩子执行指定的代码。

Some files were not shown because too many files have changed in this diff Show More