Kubernetes v1.15 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。

文档
kubeadm 概述
Setup an extension API server
Accessing Clusters
Getting started
kubeadm init
安装 kubeadm
使用 kubeadm 创建一个单主集群
Use Port Forwarding to Access Applications in a Cluster
概念
概念
Taint 和 Toleration
日志架构
Kubernetes 中的代理
Kubernetes集群中使用Sysctls
Managing Compute Resources for Containers
Secret
云供应商
安装扩展(Addons)
概念模板示例
联邦
设备插件
证书
集群管理概述
Provide Load-Balanced Access to an Application in a Cluster
Tasks
Administer a Cluster
Access Clusters Using the Kubernetes API (EN)
Access Services Running on Clusters (EN)
Advertise Extended Resources for a Node (EN)
Autoscale the DNS Service in a Cluster (EN)
Change the default StorageClass (EN)
Change the Reclaim Policy of a PersistentVolume (EN)
Cluster Management (EN)
Configure Multiple Schedulers (EN)
Configure Out Of Resource Handling (EN)
Configure Quotas for API Objects (EN)
Control CPU Management Policies on the Node (EN)
Customizing DNS Service (EN)
Debugging DNS Resolution (EN)
Declare Network Policy (EN)
Developing Cloud Controller Manager (EN)
Encrypting Secret Data at Rest (EN)
Guaranteed Scheduling For Critical Add-On Pods (EN)
IP Masquerade Agent User Guide (EN)
Kubernetes Cloud Controller Manager (EN)
Limit Storage Consumption (EN)
Namespaces Walkthrough (EN)
Operating etcd clusters for Kubernetes (EN)
Reconfigure a Node's Kubelet in a Live Cluster (EN)
Reserve Compute Resources for System Daemons (EN)
Safely Drain a Node while Respecting the PodDisruptionBudget (EN)
Securing a Cluster (EN)
Set Kubelet parameters via a config file (EN)
Set up High-Availability Kubernetes Masters (EN)
Share a Cluster with Namespaces (EN)
Using a KMS provider for data encryption (EN)
Using CoreDNS for Service Discovery (EN)
Using NodeLocal DNSCache in Kubernetes clusters (EN)
Using sysctls in a Kubernetes Cluster (EN)
Extend kubectl with plugins (EN)
Manage HugePages (EN)
Schedule GPUs (EN)
Use a Service to Access an Application in a Cluster
删除 StatefulSet
授权概述
裸金属
使用 Salt 配置 Kubernetes 集群
Create an External Load Balancer
配置你的云平台防火墙
List All Container Images Running in a Cluster
Configure DNS for a Cluster
Federation - Run an App on Multiple Clusters
(EN)
ABAC 模式
Advanced Topics (EN)
Docker 用户使用 kubectl 命令指南
Docs smoke test page (EN)
Encrypting Secret Data at Rest
Foundational (EN)
Foundational (EN)
Intermediate (EN)
Intermediate (EN)
JSONPath 支持
kube-apiserver
kube-proxy
kube-scheduler
kubectl
kubectl概述
kubelet
Kubelet authentication/authorization
Kubernetes API访问控制
Kubernetes 对象管理
Search Results (EN)
StatefulSet 基本使用
TLS bootstrapping
Tools
Webhook Mode
使用 Calico 来提供 NetworkPolicy
使用 Romana 来提供 NetworkPolicy
使用 Service 把前端连接到后端
使用 Source IP
使用 Weave 网络来提供 NetworkPolicy
使用ConfigMap来配置Redis
使用Deployment运行一个无状态应用
使用准入控制插件
使用启动引导令牌(Bootstrap Tokens)认证
使用命令式的方式管理 Kubernetes 对象
关键插件 Pod 的调度保证
创建大规模集群
同 Pod 内的容器使用共享卷通信
在 Kubernetes 中配置私有 DNS 和上游域名服务器
在 Kubernetes 集群中使用 sysctl
基于 Persistent Volumes 搭建 WordPress 和 MySQL 应用
基于Replication Controller执行滚动升级
声明网络策略
多区域运行
安全考虑
对 DaemonSet 执行回滚
将 kubeadm 集群在 v1.8 版本到 v1.9 版本之间升级/降级
应用资源配额和限额
弹缩StatefulSet
控制节点上的CPU管理策略
改变默认 StorageClass
更改 PersistentVolume 的回收策略
知名标签(Label)、注解(Annotation)和 Taints
示例:使用 Stateful Sets 部署 Cassandra
管理Service Accounts
管理巨页(HugePages)
节点设置校验
设置 Pod CPU 和内存限制
访问集群上运行的服务
证书轮换
调度 GPU
运行 ZooKeeper, 一个 CP 分布式系统
运行一个单实例有状态应用
通过配置文件设置 Kubelet 参数
配置命名空间下pod总数
配置对多集群的访问
集群管理
静态Pods

Edit This Page

安装 kubeadm

本文会告诉您如何安装 kubeadm 工具。完成本文提到的安装步骤后,您可以阅读 使用 kubeadm 来创建集群 了解如何使用 kubeadm 来创建集群。

准备开始

确保每个节点上 MAC 地址和 product_uuid 的唯一性。

一般来讲,硬件设备会拥有独一无二的地址,但是有些虚拟机可能会雷同。Kubernetes 使用这些值来唯一确定集群中的节点。如果这些值在集群中不唯一,可能会导致安装失败

检查网络适配器

如果您有一个以上的网络适配器,同时您的 Kubernetes 组件通过默认路由不可达,我们建议您预先添加 IP 路由规则,这样 Kubernetes 集群就可以通过对应的适配器完成连接。

检查所需端口

Master 节点

规则 方向 端口范围 作用 使用者
TCP Inbound 6443* Kubernetes API server All
TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 10251 kube-scheduler Self
TCP Inbound 10252 kube-controller-manager Self

Worker 节点

规则 方向 端口范围 作用 使用者
TCP Inbound 10250 Kubelet API Self, Control plane
TCP Inbound 30000-32767 NodePort Services** All

** NodePort 服务 的默认端口范围。

任何使用 * 标记的端口号都有可能被覆盖,所以您需要保证您的自定义端口的状态是开放的。

虽然主节点已经包含了 etcd 的端口,您也可以使用自定义的外部 etcd 集群,或是指定自定义端口。 您使用的 pod 网络插件 (见下) 也可能需要某些特定端口开启。由于各个 pod 网络插件都有所不同,请参阅他们各自文档中对端口的要求。

安装 runtime

从 v1.6.0 起,Kubernetes 开始允许使用 CRI,容器运行时接口。默认的容器运行时是 Docker,这是由 kubelet 内置的 CRI 实现 dockershim 开启的。

其他的容器运行时有:

参考 CRI 安装指南 获取更多信息.

安装 kubeadm, kubelet 和 kubectl

您需要在每台机器上都安装以下的软件包:

kubeadm 不能 帮您安装或管理 kubeletkubectl ,所以您得保证他们满足通过 kubeadm 安装的 Kubernetes 控制层对版本的要求。如果版本没有满足要求,就有可能导致一些难以想到的错误或问题。然而控制层与 kubelet 间的 小版本号 不一致无伤大雅,不过请记住 kubelet 的版本不可以超过 API server 的版本。例如 1.8.0 的 API server 可以适配 1.7.0 的 kubelet,反之就不行了。

Warning: 这些指南不包括所有系统升级时使用的 Kubernetes 程序包。这是因为 kubeadm 和 Kubernetes 需要 升级时的特别注意事项

更多关于版本偏差的信息,请参阅 版本偏差政策

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。

在 Master 节点上配置 kubelet 所需的 cgroup 驱动

使用 Docker 时,kubeadm 会自动为其检测 cgroup 驱动在运行时对 /var/lib/kubelet/kubeadm-flags.env 文件进行配置。 如果您使用了不同的 CRI, 您得把 /etc/default/kubelet 文件中的 cgroup-driver 位置改为对应的值,像这样:

KUBELET_EXTRA_ARGS=--cgroup-driver=<value>

这个文件将会被 kubeadm initkubeadm join 用于为 kubelet 获取 额外的用户参数。

请注意,您需要在您的 cgroup driver 不是 cgroupfs 时这么做,因为 cgroupfs 已经是 kubelet 的默认值了。

需要重启 kubelet:

systemctl daemon-reload
systemctl restart kubelet

查错

如果您在使用 kubeadm 时候遇到问题,请查看我们的疑难解答文档.

接下来

反馈