fix web style error
11 KiB
reviewers, title, content_template
| reviewers | title | content_template | ||
|---|---|---|---|---|
|
Kubernetes 101 | templates/tutorial |
{{% capture overview %}}
关于 Kubernetes 101,我们将涵盖 kubectl, Pods, Volumes 和多个容器这些内容。
{{% /capture %}}
{{% capture objectives %}}
kubectl是什么。- 管理 Pod。
- 创建和挂载卷。
- 在一个 Pod 中创建多个容器。
{{% /capture %}}
{{% capture prerequisites %}}
- {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
- 为了 kubectl 使用示例能正常工作,请确保您在本地有一个示例目录,可以从 一个发行版本 或者最新的
.yaml文件 这里 获取。
{{% /capture %}}
{{% capture lessoncontent %}}
Kubectl 命令行
与 Kubernetes 进行交互最简单的方法就是通过 kubectl 命令行。
想要了解更多关于 kubectl,包括它的使用、命令和参数,查看 kubectl 概览。
想要了解更多关于 kubectl 的安装和配置,查看 安装和设置 kubectl。
Pods
在 Kubernetes 中,一组一个或者多个容器被称为 Pod 。在一个 Pod 里的容器是在一起部署的,它们作为一组一起启动、停止和伸缩。
想要了解更多, 查看 Pods。
Pod 定义
最简单的 Pod 定义描述了 Deployment 中的单个容器。例如,一个 nginx web 服务器 Pod 可能被定义为:
{{< codenew file="pods/simple-pod.yaml" >}}
Pod 是对预期状态的声明的定义。预期状态在 Kubernetes 模型中是一个非常重要的概念。在这个系统中的很多东西都呈现为预期的状态,Kubernetes 保证现在的状态和预期的状态保持一致。例如,当您创建了一个 Pod 并且声明了将要在里面运行的容器。如果这些容器因为程序故障没有运行,Kubernetes 将继续创建或者重新创建这个 Pod 以使这个 Pod 达到期望状态。这个过程会一直持续直到您删除这个 Pod。
想了解更多信息,请查看 Kubernetes Design Documents and Proposals。
Pod 管理
创建一个包含 nginx 服务器的 Pod (simple-pod.yaml):
kubectl create -f https://k8s.io/examples/pods/simple-pod.yaml
列出所有的 Pod:
kubectl get pods
对于大多数服务提供商,Pod IP 无法从外部访问。测试 Pod 是否工作的最简单方法是创建一个 busybox Pod 并且远程执行 exec 命令。有关更多信息,请参阅 获取正在运行的容器的Shell.
如果可以访问 Pod 的 IP,则可以使用端口 80 上的 wget 访问其 http 端点:
kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1 --env "POD_IP=$(kubectl get pod nginx -o go-template='{{.status.podIP}}')"
u@busybox$ wget -qO- http://$POD_IP # Run in the busybox container
u@busybox$ exit # Exit the busybox container
kubectl delete pod busybox # Clean up the pod we created with "kubectl run"
删除一个名为 nginx 的 Pod:
kubectl delete pod nginx
卷
这对于简单的静态 Web 服务器来说非常棒,但是持久存储呢?
容器文件系统只在容器中存在。因此,如果您的应用程序的状态需要在重定位,重新启动和崩溃中存活,您将需要配置一些持久存储。
在此示例中,您将创建一个具有数据卷的 Redis Pod,并将数据卷挂载到指定的路径。
-
定义一个卷:
volumes: - name: redis-storage emptyDir: {}
-
在容器定义中定义卷挂载:
volumeMounts: # name must match the volume name defined in volumes - name: redis-storage # mount path within the container mountPath: /data/redis
以下是具有持久存储卷的 Redis Pod 定义的示例 (redis.yaml):
{{< codenew file="pods/storage/redis.yaml" >}}
其中:
volumeMountsname是特定volumesname的引用。volumeMountsmountPath是在容器中挂载卷的路径。
卷类型
- EmptyDir: 只要 Pod 在节点上运行,就会创建一个新目录,但它可以在容器故障和重新启动之间保持不变。
- HostPath: 在节点的文件系统上安装现有目录。例如 (
/var/logs).
有关更多信息,请参阅 卷.
多个容器
{{< note >}} 注意: 以下示例在语法上是正确的,但某些镜像(例如 kubernetes/git-monitor)尚不存在。我们正在努力将这些变成可以工作的示例。 {{< /note >}}
但是,通常您希望有两个不同的容器一起工作。这方面的一个例子是 Web 服务器和一个帮助程序作业,它可以轮询 git 仓库以获取更新:
apiVersion: v1
kind: Pod
metadata:
name: www
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /srv/www
name: www-data
readOnly: true
- name: git-monitor
image: kubernetes/git-monitor
env:
- name: GIT_REPO
value: http://github.com/some/repo.git
volumeMounts:
- mountPath: /data
name: www-data
volumes:
- name: www-data
emptyDir: {}
请注意,我们在此处还添加了一个卷。在这种情况下,卷安装在两个容器中。它在 Web 服务器容器的情况下标记为 readOnly,因为它不需要写入目录。
最后,我们还向 git-monitor 容器引入了一个环境变量,它允许我们使用我们想要跟踪的特定 git 仓库来参数化该容器。
{{% /capture %}}
{{% capture whatsnext %}}
继续阅读 Kubernetes 201 或者有关完整的应用程序,请参阅 [guestbook 示例](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/guestbook/)
{{% /capture %}}