提交 28eb56ec 编写于 作者: F feilong

准备好云原生入门

上级 0ec7db36
...@@ -3,9 +3,9 @@ ...@@ -3,9 +3,9 @@
"keywords": [], "keywords": [],
"children": [], "children": [],
"export": [ "export": [
"start_k8s.json",
"install_kind.json", "install_kind.json",
"get_info.json", "get_info.json",
"start_k8s.json",
"start_k8s_three_nodes.json" "start_k8s_three_nodes.json"
], ],
"keywords_must": [], "keywords_must": [],
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
"children": [], "children": [],
"export": [ "export": [
"create_deployment.json", "create_deployment.json",
"create_service.json", "rs_pod.json",
"rs_pod.json" "create_service.json"
], ],
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
......
{
"node_id": "cloud_native-d803deb6ed5043f2925cb47b555ea9bc",
"keywords": [],
"children": [],
"export": [
"install.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "install.md",
"notebook_enable": false,
"exercise_id": "17f5443a8179431ba8fd628725cae86f"
}
\ No newline at end of file
# 安装 helm
Linux系统上有包管理软件
* 例如 centos 上有 yum
* 例如 ubuntu 上有 apt-get
Mac系统上有包管理软件
* 例如 brew
Windows 上也有可用的包管理软件
* 例如 scoop
* 例如 choco
云原生的事实标准平台 k8s 上也可以安装各种组件和服务。而 helm 就是 k8s 的包管理软件,用来给 k8s 平台安装各种组件包或者服务包。
在不同平台上,通过对应平台的包管理软件,[可以快速安装 helm 客户端命令](https://helm.sh/docs/intro/install/)
例如 Windows 上(注:choco 是Windows上的一个包管理命令[chocolatey](https://chocolatey.org/))
```bash
choco install kubernetes-helm
```
例如 Mac 上,直接使用 brew 安装:
```bash
brew install helm
```
![](./img/install.png)
以下说法错误的是?
## 答案
helm 是用来安装 k8s 集群的软件
## 选项
### A
不使用 helm 也可以给 k8s 安装包和组件,helm 简化了 k8s 上的包和服务的组件的安装
### B
在不同的操作系统上,可以通过对应操作系统本身的包管理软件安装 helm 这个 K8s 的包管理软件
### C
helm 是 Kubernetes 的包管理器
{
"type": "code_options",
"author": "huanhuilong",
"source": "concept.md",
"notebook_enable": false,
"exercise_id": "eba3e7be19594218bb6be54b11fbfe27"
}
\ No newline at end of file
# helm三大概念(Chart、Repository、Release)
helm 通过三大概念来管理 k8s 上的包
* Chart:Chart 代表着 helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。
* Repository:是 chart 的存储库。例如:https://charts.bitnami.com/bitnami
* Release:Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。
一下说法错误的是?
## 答案
一个Heml的Chart,只能被安装到 k8s 集群一次,再次安装会失败
## 选项
### A
一个helm的Chart,可以被多次安装到 k8s 集群,每次安装是一个独立的 release
### B
可以将一个helm 的Chart 上传到它的 Repository上,然后从Repository来安装一个Chart
### C
helm 通过 Chart 来定义一个 k8s 的组件包
{
"node_id": "cloud_native-ef938d686b4045f2a2da9e6b57500851",
"keywords": [],
"children": [],
"export": [
"concept.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cloud_native-e25cf855bd204baa82d43aeda5509431",
"keywords": [],
"children": [],
"export": [
"install.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "install.md",
"notebook_enable": false,
"exercise_id": "7873f9f3910e449eb4021ac1ae6bfad2"
}
\ No newline at end of file
# 使用helm安装mysql
首先,初始化下 helm 的仓库,命名为 bitnami
```bash
helm repo add bitnami https://charts.bitnami.com/bitnami
```
其次,查看下仓库 bitnami 里有哪些包
```bash
helm search repo bitnami
```
![](./img/repo.png)
接着,通过 grep 命令过滤下 mysql 包相关的信息
```bash
helm serach repo|grep mysql
```
![](./img/repo_mysql.png)
然后,安装 mysql 包到 k8s,可以看到安装的
```bash
helm repo update # 确定我们可以拿到最新的charts列表
helm install bitnami/mysql --generate-name
```
![](./img/install_mysql_chart.png)
查看已经安装的 chart 列表,可以看到mysql已经装上了:
```bash
helm list
```
![](./img/list.png)
现在,使用`helm status xxx`命令查看已安装mysql的状态
![](./img/status.png)
以下说法错误的是?
## 答案
helm install 后 mysql 服务就启动了
## 选项
### A
kubectl 命令可以获取安装的 mysql 密钥
### B
安装后的 mysql 可以通过 kubectl run 命令在pod上启动 mysql服务
### C
可以通过 helm 在 k8s 上安装 mysql
\ No newline at end of file
{
"node_id": "cloud_native-89d35bea670a42a3aa7c135154ba16f1",
"keywords": [],
"children": [],
"export": [
"deploy.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "deploy.md",
"notebook_enable": false,
"exercise_id": "193082c8382e4f8bab07c32bff8b3b95"
}
\ No newline at end of file
# 使用 helm 部署 Python 应用
回归下示例Python应用 cloud_native_hello_py 的目录结构:
```bash
.
├── Dockerfile
├── README.md
├── k8s.deployment.yaml
├── k8s.service.yaml
└── src
├── main.py
└── requirements.txt
```
我们使用 kubectl 命令部署过该 Python 服务,现在,我们用 helm 来部署。
首先,在项目命令下通过 helm 命令创建一个chart 配置文件夹
```bash
makedir chart
cd chart
helm create hello-py
```
此时,目录结构如下:
```bash
.
├── Dockerfile
├── README.md
├── chart
│   └── hello-py
│   ├── Chart.yaml
│   ├── charts
│   ├── templates
│   │   ├── NOTES.txt
│   │   ├── _helpers.tpl
│   │   ├── deployment.yaml
│   │   ├── hpa.yaml
│   │   ├── ingress.yaml
│   │   ├── service.yaml
│   │   ├── serviceaccount.yaml
│   │   └── tests
│   │   └── test-connection.yaml
│   └── values.yaml
├── k8s.deployment.yaml
├── k8s.service.yaml
└── src
├── main.py
└── requirements.txt
```
其中:
* Chart.yaml: 基本描述
* values.yaml: 配置镜像名称等
* charts: 用于存放依赖的其他 chart
* templates: 用于存放需要的配置模板
修改 values.yaml:
```bash
replicaCount: 1
image:
image: fanfeilong/cloud_native_hello_py
pullPolicy: IfNotPresent
```
现在,使用 heml 安装
```bash
helm install ./chart/hello-py/ --generate-name
```
检测下 k8s 的 deployment 和 sevice:
![](./img/status.png)
端口转发:
![](./img/port.png)
访问服务:
![](./img/visit.png)
以下说法错误的是?
## 答案
helm 部署的 k8s 应用没法通过 kubectl 管理
## 选项
### A
helm 通过chart依赖来解决所部署的k8s应用之间的依赖
### B
helm 通过chart管理k8s应用部署的配置和模版
### C
helm 可以规范化k8s应用的配置和部署
{
"node_id": "cloud_native-d0ad36090d874dc0bd72503ea16c0ad5",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
# {在此填写标题}
{在此填写题目描述}
## 答案
{在此填写答案}
## 选项
### A
{在此填写选项A}
### B
{在此填写选项B}
### C
{在此填写选项C}
{ {
"type": "code_options", "type": "code_options",
"author": null, "author": "huanhuilong",
"source": "introduce.md", "source": "introduce.md",
"notebook_enable": false, "notebook_enable": false,
"exercise_id": "ab4f320185c64e9ea8a71d5928482709" "exercise_id": "ab4f320185c64e9ea8a71d5928482709"
......
...@@ -13,24 +13,35 @@ Client <-> Interface <-> [ProxyA->ServerA] <-> [ProxyB->ServerB] ...@@ -13,24 +13,35 @@ Client <-> Interface <-> [ProxyA->ServerA] <-> [ProxyB->ServerB]
Client <-> Interface <-> [ProxyB->ServerB] <-> [ProxyA->ServerA] Client <-> Interface <-> [ProxyB->ServerB] <-> [ProxyA->ServerA]
``` ```
微服务之间的互相访问,公共的代理部分可以做很多公共的控制逻辑。这部分的的代码标准化,下层到云原生的基础设施里,就形成了服务网格(ServiceMesh)。 微服务之间的互相访问,公共的代理部分可以做很多公共的控制逻辑。这部分的的代码标准化,下层到云原生的基础设施里,就形成了服务网格(ServiceMesh)。服务网格通常管理微服务之间这三个方面的功能:
1. 流量管理(Traffic management):动态服务发现、路由、流量灰度和流量分离等。
2. 安全(Security):加密传输、基于正式验证的授权、基于访问控制和网络分区的授权等。
3. 可观察性(Observability): 例如链路跟踪、日志等。
服务网格和 k8s 之间是什么关系呢?一图胜千言,在k8s的基础上,为每个pod增加一个proxy(或者叫边车,sidecar),有两个变化:
1. 原来k8s的node里的pod通过node的kube-proxy和 API Server 通信;在ServiceMesh下,每个pod直接通过装在pod上的proxy和API Server通信。
2. 原来k8s的node里的pod通过node的kube-proxy桥接通信;在ServiceMesh下,每个 pod 之间直接通过装在 pod上的proxy直接通信。
![](./img/k8s_native_vs_service_mesh.png)
以下说法错误的是? 以下说法错误的是?
## 答案 ## 答案
使用了微服务,就一定要用服务网格(ServiceMesh). 服务网格之间的通信都要通过 API Server 转发。
## 选项 ## 选项
### A ### A
服务网格将公共的服务间路由和共享数据逻辑抽象出来,作为一个基础架构层 服务网格通常解决流量管理、服务安全、服务可观察性问题
### B ### B
微服务可以没有服务网格,每个服务自己写一些服务间路由代码 在k8s原生组件的基础上,给每个pod安装服务网格的proxy,对这些proxy的编排调度,构成里服务网格层
### C ### C
服务网格的特点是内置的基础架构层 服务网格的特点是,将微服务管理功能内置到基础架构层,无需在应用层写相关代码
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
"keywords": [], "keywords": [],
"children": [], "children": [],
"export": [ "export": [
"install.json" "install.json",
"install2.json"
], ],
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
......
{ {
"type": "code_options", "type": "code_options",
"author": null, "author": "huanhuilong",
"source": "install.md", "source": "install.md",
"notebook_enable": false, "notebook_enable": false,
"exercise_id": "0e05870e435d4d90a0192aecbde5e8ff" "exercise_id": "0e05870e435d4d90a0192aecbde5e8ff"
......
# 使用istioctl安装istio
istio 是服务网格基础设施的一种实现,支持在多个不同的云原生基础设施上工作。下载 istio:
```bash
curl -L https://istio.io/downloadIstio | sh -
```
但是可能会遇到各种网络导致的下载问题,也可以直接在[发布页面](https://github.com/istio/istio/releases/)找到不同操作系统最新版本发布包下载。例如:
```bash
wget https://github.com/istio/istio/releases/download/1.13.2/istio-1.13.2-osx.tar.gz
```
下载后解压,并查看目录结构
```bash
tar xf istio-1.13.2-osx.tar.gz
cd istio-1.13.2/
tree -L 2
```
可以看到目录结构如下:
```bash
.
├── LICENSE
├── README.md
├── bin
│   └── istioctl
├── manifest.yaml
├── manifests
│   ├── charts
│   ├── examples
│   └── profiles
├── samples
│   ├── README.md
│   ├── addons
│   ├── bookinfo
│   ├── certs
│   ├── custom-bootstrap
│   ├── extauthz
│   ├── external
│   ├── grpc-echo
│   ├── health-check
│   ├── helloworld
│   ├── httpbin
│   ├── jwt-server
│   ├── kind-lb
│   ├── kubernetes-blog
│   ├── multicluster
│   ├── open-telemetry
│   ├── operator
│   ├── ratelimit
│   ├── security
│   ├── sleep
│   ├── tcp-echo
│   └── websockets
└── tools
├── _istioctl
├── certs
└── istioctl.bash
```
其中:
* bin/ 目录下是istio的命令行客户端程序
* samples/ 下是各种应用例子
把 bin/ 目录添加到系统的PATH路径(Linux/Mac):
```bash
export PATH=$PWD/bin:$PATH
```
或者安装到系统bin目录:
```bash
sudo install bin/istioctl /usr/local/bin/istioctl
```
现在,执行 istioctl 命令回车:
```bash
istioctl
```
可以看到 istioctl 支持的子命令列表:
![](./img/commands.png)
istio 通过`profile`对不同的配置分组,内置的`profile`列表可以通过命令`istioctl profile list`查看:
```bash
Istio configuration profiles:
default
demo
empty
external
minimal
openshift
preview
remote
```
例如,使用命令`istioctl profile dump demo`查看名为`demo``profile`:
![](./img/dump_profile.png)
配置`profile=demo`,安装istio到k8s
```
istioctl install --set profile=demo
```
以下说法错误的是?
## 答案
istioctl 只能使用一种 profile 安装,一旦安装不可更改
## 选项
### A
istio 可以在不同的云原生基础设施上工作,例如 k8s, meos等
### B
istioctl 是 istio 的命令行客户端,通过istioctrl的一组子命令可以管理服务网格基础服务
### C
istio 是ServiceMash的一种实现,可以在 k8s 系统上安装 istio 组件
{
"type": "code_options",
"author": "huanhuilong",
"source": "install2.md",
"notebook_enable": false,
"exercise_id": "cb235d71027d44bd8a0c4297c32e0a7e"
}
\ No newline at end of file
# 使用 helm 安装istio
更便利的方式是使用 helm 安装 istio。首先添加istio repo
```bash
helm repo add istio https://istio-release.storage.googleapis.com/charts
```
其次,创建一个k8s namespace:
```bash
kubectl create namespace istio-system
```
接着,安装istio到k8s集群
```bash
helm install istio-base istio/base -n istio-system
```
以下说法错误的是?
## 答案
通过helm 安装的istio和通过istioctl安装的有很大差异
## 选项
### A
可以不创建k8s 名称空间,直接将istio安装到k8s默认名称空间
### B
通过 helm 参数 -n 将 istio 安装到指定的 k8s 名称空间
### C
使用 helm 安装 istio 比直接用 istioctl 安装方便
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
"node_id": "cloud_native-80dec61abcca4348a6fdc9b9b727b486", "node_id": "cloud_native-80dec61abcca4348a6fdc9b9b727b486",
"keywords": [], "keywords": [],
"children": [], "children": [],
"export": [], "export": [
"traffic.json"
],
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
} }
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "traffic.md",
"notebook_enable": false,
"exercise_id": "b4cea99c59f946e7be5c08dccd76649e"
}
\ No newline at end of file
# istio 流量管理
下面是一组 istio 流量管理的实战文档
* [配置请求路由(request-routing)](https://istio.io/latest/zh/docs/tasks/traffic-management/request-routing): 如何将请求动态路由到微服务的多个版本。
* [故障注入(fault-injection)](https://istio.io/latest/zh/docs/tasks/traffic-management/fault-injection):此任务说明如何注入故障并测试应用程序的弹性。
* [流量转移(traffic-shifting)](https://istio.io/latest/zh/docs/tasks/traffic-management/traffic-shifting): 展示如何将流量从旧版本迁移到新版本的服务。
* [TCP 流量转移(tcp-traffic-shifting)](https://istio.io/latest/zh/docs/tasks/traffic-management/tcp-traffic-shifting): 展示如何将一个服务的 TCP 流量从旧版本迁移到新版本。
* [设置请求超时(request-timeouts)](https://istio.io/latest/zh/docs/tasks/traffic-management/request-timeouts):本任务用于示范如何使用 Istio 在 Envoy 中设置请求超时。
* [熔断(circuit-breaking)](https://istio.io/latest/zh/docs/tasks/traffic-management/circuit-breaking):本任务展示如何为连接、请求以及异常检测配置熔断。
* [镜像(mirroring)](https://istio.io/latest/zh/docs/tasks/traffic-management/mirroring):此任务演示了 Istio 的流量镜像/影子功能。
* [地域负载均衡(locality-load-balancing)](https://istio.io/latest/zh/docs/tasks/traffic-management/locality-load-balancing):本系列任务演示如何在 Istio 中配置地域负载均衡。
* [Ingress](https://istio.io/latest/zh/docs/tasks/traffic-management/ingress):控制 Istio 服务网格的入口流量。
* [Egress](https://istio.io/latest/zh/docs/tasks/traffic-management/egress):控制 Istio 服务网格的出口流量。
以下说法错误的是?
## 答案
通过 istio 没办法测试超时请求
## 选项
### A
通过 istio 的 Ingress 和 Egress,可以控制服务网格的出口和入口流量
### B
通过 istio 的流量转移,可以做灰度发布
### C
通过 istio 可以在 k8s 的服务网格内将请求路由到服务的不同版本
\ No newline at end of file
{
"node_id": "cloud_native-029c7b191f8347d69d807d04fd315ced",
"keywords": [],
"children": [],
"export": [
"security.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "security.md",
"notebook_enable": false,
"exercise_id": "16380db9ebce4f218b04013dca03b5db"
}
\ No newline at end of file
# istio 安全管理
通过 istio 可以做一下哪些安全控制?
1. 认证:管控网格服务间的双向 TLS 和终端用户的身份认证。
2. 证书管理:管理 Istio 的证书。
3. 授权:展示如何控制到 Istio 服务的访问。
## 答案
1,2,3
## 选项
### A
1,3
### B
2,3
### C
1,2
{
"node_id": "cloud_native-7303d1d645de4693b303d04c962e1167",
"keywords": [],
"children": [],
"export": [
"observer.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "observer.md",
"notebook_enable": false,
"exercise_id": "0c6785355ca6479f9130878e9f7a4eca"
}
\ No newline at end of file
# istio 可观察性
下面是一组可观察性的操作任务
* [指标度量(metrics)](https://istio.io/latest/zh/docs/tasks/observability/metrics/):演示 Istio 网格指标度量的配置、收集和处理。
* [日志(logs)](https://istio.io/latest/zh/docs/tasks/observability/logs/):演示 Istio 网格日志的配置、收集和处理。
* [分布式追踪(distributed-tracing)](https://istio.io/latest/zh/docs/tasks/observability/distributed-tracing/):该任务展示了如何为启用了 Istio 支持的应用进行追踪。
* [网络可视化(kiali)](https://istio.io/latest/zh/docs/tasks/observability/kiali/):此任务向您展示如何在 Istio 网格中可视化服务。
* [gateways](https://istio.io/latest/zh/docs/tasks/observability/gateways/):此任务向您展示如何配置从外部访问 Istio gateways。
以下说法错误的是?
## 答案
istio 可以直接对应用作持续集成
## 选项
### A
istio 可以通过分布式链路最终定位问题
### B
istio 可以使用 kiali 对网格进行可视化
### C
istio 可以对服务网格做统一日志配置、收集和处理
\ No newline at end of file
{
"node_id": "cloud_native-a91605664c3f4cb69475c789c616e4a3",
"keywords": [],
"children": [],
"export": [
"install.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "install.md",
"notebook_enable": false,
"exercise_id": "47cb2bb48380486e9bdfb5f326215730"
}
\ No newline at end of file
# 使用 helm 安装 Jenkins 到k8s集群,配置CI/CD
首先,添加 repo:
```bash
helm repo add jenkins https://charts.jenkins.io
```
其次,创建一个 k8s 名称空间:
```bash
kubectl create ns jenkins
```
接着,安装 jenkins:
```bash
helm install jenkins jenkins/jenkins -n jenkins
```
最后,查看登陆地址
```bash
export SERVICE_IP=$(kubectl get svc --namespace default jenkins --template '{{ range (index .status.loadBalancer.ingress 0) }}{{ .}}{{ end }}') && echo http://$SERVICE_IP:8080/login
```
以下说法错误的是?
## 答案
部署 jenkins 到k8s后,无法找到jenkins的登陆地址
## 选项
### A
可以使用 helm 快速安装 jenkins 到k8s,通过 helm 部署应用到k8s平台有非常强的一致性和便利性
### B
在k8s 内部署jenkins,使得其自动获得了高可用
### C
jenkins 可以部署在 k8s 内,也可以部署在k8s 外
{
"type": "code_options",
"author": "huanhuilong",
"source": "cicd.md",
"notebook_enable": false,
"exercise_id": "95519091400041caa21b29be17ff6dc6"
}
\ No newline at end of file
# CI/CD
一旦登陆 jenkins ,可以配置一系列 CI/CD动作:
* CI
* 拉取代码
* 构建/测试/打包
* 构建容器镜像
* CD
* 推送容器镜像到镜像中心
* 执行k8s命令,拉取镜像
* 执行k8s命令,部署
* 执行k8s命令,滚动更新
以下说法错误的是?
## 答案
CD 指的是 k8s 会构建一个唱片
## 选项
### A
通过 k8s 命令,可以方便地将应用镜像部署到集群里的服务网格,实现滚动更新,完成CD环节
### B
持续集成负责自动从源代码版本仓库拉取代码,自动构建
### C
CI和CD是两个不同的阶段
{
"node_id": "cloud_native-8cb2691d48544d4c81422d89485e48d1",
"keywords": [],
"children": [],
"export": [
"cicd.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{ {
"type": "code_options", "type": "code_options",
"author": null, "author": "huanhuilong",
"source": "introduce.md", "source": "introduce.md",
"notebook_enable": false, "notebook_enable": false,
"exercise_id": "f8534f83cea54f39bafb2720eb84a9b0" "exercise_id": "f8534f83cea54f39bafb2720eb84a9b0"
......
{ {
"type": "code_options", "type": "code_options",
"author": null, "author": "huanhuilong",
"source": "install.md", "source": "install.md",
"notebook_enable": false, "notebook_enable": false,
"exercise_id": "7ab9d5025ef04a6c96e3a7ff3d5840a6" "exercise_id": "7ab9d5025ef04a6c96e3a7ff3d5840a6"
......
{
"node_id": "cloud_native-11a547517d4f412e9639ca61dcd6eaf7",
"keywords": [],
"children": [],
"export": [
"layer.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "layer.md",
"notebook_enable": false,
"exercise_id": "277be44763cb4c38b41c1eb887506546"
}
\ No newline at end of file
# 云原生的分层
下述说法正确的有哪些?
1. 容器(`docker`) 是云原生的核心基础组件,在云原生平台上,一切软件都被容器化
2. `k8s` 提供了对容器的分布式编排和调度,从而完成了对一切被容器化的软件的分布式编排和调度
3. 除了 k8s 原始的 kubectl 命令,`helm` 提供了更便利的 k8s 集群的包管理
4. 例如,使用 helm 可以在 k8s 集群上安装 `mysql`, 安装`python 服务程序`
5. 当然,使用 helm 也可以在 k8s 集群上安装服务网格(`ServiceMesh`)的事实标准`istio`套装
6. `istio` 提供了k8s之上的服务网格全功能代理,将分布式系统构架里的流量管理、安全控制、可观察性下层到云原生基础设施
7. 继续,使用 helm 可以在k8s内直接部署CI/CD软件,例如Jenkins,直接提供了高可用的CI/CD,完成应用程序的自动拉取,测试、打包和镜像构建上传,以及k8s集群里的滚动更新。
8. 最后,跨云上的k8s基础设施配置,可以通过 Terraform 完成标准化、可移植的管理
## 答案
1,2,3,4,5,6,7,8
## 选项
### A
1,2,3,4
### B
5,6,7,8
### C
3,4,5,6,7
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "commands.md",
"notebook_enable": false,
"exercise_id": "d49178417d104cb69de5aae5b0e3c428"
}
\ No newline at end of file
# 云原生的命令
下面对云原生的一系列命令说法正确的有哪些?
1. `docker` 包含了对 image 构建的一组子命令,和对 container 运行管理的一组子命令
2. `kubectl` 是 k8s 的客户端控制命令,包含了对 k8s 集群内的 namespace/node/pod/deployment/service 等资源等操作子命令
3. `minikube``kind`都可以便利地创建学习环境下的k8s集群
4. 生产环境下`kubeadm`是用来创建k8s集群的命令
5. `helm`是k8s的包管理命令
6. `istioctl`是服务网格基础设施istio的客户端控制命令
7. `terraform`是标准化的、可移植的跨云基础设施管理和构建命令
## 答案
1,2,3,4,5,6,7
## 选项
### A
1,2,3,4,5,6
### B
2,3,4,5,6,7
### C
1,3,4,5,6,7,8
\ No newline at end of file
{
"node_id": "cloud_native-34b5d17c4bb347ee896a35b06d18f7b4",
"keywords": [],
"children": [],
"export": [
"commands.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"node_id": "cloud_native-869b95155c8f4c5a9d969f364d8f75b0",
"keywords": [],
"children": [],
"export": [
"program.json"
],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
{
"type": "code_options",
"author": "huanhuilong",
"source": "program.md",
"notebook_enable": false,
"exercise_id": "095219f35eaf480c923bb0e4523557ea"
}
\ No newline at end of file
# 云原生下的编程
以下对云原生下的编程说法正确的有哪些?
1. 云原生下的编程,核心是将应用程序打包成容器镜像
2. 云原生下的编程,容器镜像可以被部署到 k8s 的node里的pod上运行
3. 云原生下的编程,天生上是分布式的程序
4. 云原生下的编程,传统分布式服务构架的很多开发工作都已经被下层到k8s或者服务网格基础设施层
5. 云原生下的编程,有大量的对 yaml 做声明式配置的工作
6. 云原生下的编程,CI/CD是常见的做法,并且具有高可用
## 答案
1,2,3,4,5,6
## 选项
### A
1,4,5,6
### B
2,3,4,5,6
### C
1,2,3,4,5
\ No newline at end of file
{
"node_id": "cloud_native-2d51bd6d2b7344fba58243b2cc81d8cb",
"keywords": [],
"keywords_must": [],
"keywords_forbid": []
}
\ No newline at end of file
...@@ -155,6 +155,52 @@ ...@@ -155,6 +155,52 @@
"keywords_forbid": [] "keywords_forbid": []
} }
}, },
{
"k8s包管理(helm)": {
"node_id": "cloud_native-d0ad36090d874dc0bd72503ea16c0ad5",
"keywords": [],
"children": [
{
"安装helm": {
"node_id": "cloud_native-d803deb6ed5043f2925cb47b555ea9bc",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"helm三大概念": {
"node_id": "cloud_native-ef938d686b4045f2a2da9e6b57500851",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用helm安装mysql到k8s": {
"node_id": "cloud_native-e25cf855bd204baa82d43aeda5509431",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"使用helm部署Python应用": {
"node_id": "cloud_native-89d35bea670a42a3aa7c135154ba16f1",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
},
{ {
"服务网格(istio)": { "服务网格(istio)": {
"node_id": "cloud_native-4ebf1370e7124635a812ccc4bd5cdc21", "node_id": "cloud_native-4ebf1370e7124635a812ccc4bd5cdc21",
...@@ -179,13 +225,31 @@ ...@@ -179,13 +225,31 @@
} }
}, },
{ {
"使用istio监控服务": { "istio流量管理": {
"node_id": "cloud_native-80dec61abcca4348a6fdc9b9b727b486", "node_id": "cloud_native-80dec61abcca4348a6fdc9b9b727b486",
"keywords": [], "keywords": [],
"children": [], "children": [],
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
} }
},
{
"istio安全": {
"node_id": "cloud_native-029c7b191f8347d69d807d04fd315ced",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"istio可观察性": {
"node_id": "cloud_native-7303d1d645de4693b303d04c962e1167",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
} }
], ],
"keywords_must": [], "keywords_must": [],
...@@ -196,7 +260,26 @@ ...@@ -196,7 +260,26 @@
"持续集成和部署(Jenkins)": { "持续集成和部署(Jenkins)": {
"node_id": "cloud_native-1c1ab3786e8a42668c7b5b79f6fc81a4", "node_id": "cloud_native-1c1ab3786e8a42668c7b5b79f6fc81a4",
"keywords": [], "keywords": [],
"children": [], "children": [
{
"使用helm安装Jenkins": {
"node_id": "cloud_native-a91605664c3f4cb69475c789c616e4a3",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"k8s持续集成(CI,CD)": {
"node_id": "cloud_native-8cb2691d48544d4c81422d89485e48d1",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
} }
...@@ -228,6 +311,43 @@ ...@@ -228,6 +311,43 @@
"keywords_must": [], "keywords_must": [],
"keywords_forbid": [] "keywords_forbid": []
} }
},
{
"云原生环境小结": {
"node_id": "cloud_native-2d51bd6d2b7344fba58243b2cc81d8cb",
"keywords": [],
"children": [
{
"云原生的分层": {
"node_id": "cloud_native-11a547517d4f412e9639ca61dcd6eaf7",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"云原生的命令": {
"node_id": "cloud_native-34b5d17c4bb347ee896a35b06d18f7b4",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
},
{
"云原生下的编程": {
"node_id": "cloud_native-869b95155c8f4c5a9d969f364d8f75b0",
"keywords": [],
"children": [],
"keywords_must": [],
"keywords_forbid": []
}
}
],
"keywords_must": [],
"keywords_forbid": []
}
} }
], ],
"keywords_must": [], "keywords_must": [],
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册