3.1 安装准备
Kubernetes 网站 上有多种搭建 Kubernetes 集群的方法,例如 minikube、kubeadm 等。
Kubernetes 可以在多种平台运行,从笔记本电脑,到云服务商的虚拟机,再到机架上的裸机服务器。要创建一个 Kubernetes 集群,根据不同场景需要做的也不尽相同,可能是运行一条命令,也可能是配置自己的定制集群。
- 本地服务器方案:包括三种,分别是本地 Docker、Vagrant 和无虚拟机本地集群(Linux)。基于 Docker 的本地方案:是众多能够完成快速搭建的本地集群方案中的一种,但是局限于单台机器。
- 托管解决方案(如 Google Container Engine)是最容易搭建和维护的。当你准备好扩展到多台机器和更高可用性时。
- 全套云端方案(如 AWS、Azure 等):只需要少数几个命令就可以在更多的云服务提供商搭建 Kubernetes。
- 定制方案 需要花费更多的精力,但是覆盖了从零开始搭建 Kubernetes 集群的通用建议到分步骤的细节指引。
表格 5 Kubernatess 发行版
发行版 | 简介 | 许可和定价模型 | 安装 |
---|---|---|---|
原版开源 Kubernetes | Kubernetes 由 Cloud Native Computing Foundation(云原生计算资金会)和 Kubernetes 用户组成的多样化社区支持,也是第一个从 CNCF 毕业的项目。 | 开源且 100%免费 | |
红帽 OpenShift | 在 Kubernetes 之前,OpenShift 作为一个单独项目并使用完全不同的技术运行。后来,红帽意识到 Kubernetes 的能力越来越强大,因此在第 3 版中明智地将其作为 OpenShift 的核心。 | 三种定价模式: | 不是很复杂,但需要特定配置。 |
CoreOS Tectonic | 由 CoreOS 创建,CoreOS 是一家致力于发展容器技术公司,但已被红帽收购,目前正在与红帽集成。优势功能如下:易于设置、用户友好的 Web UI、用户管理 对供应商的支持 | 拥有商业许可模式,最多可免费提供 10 个节点 | 可以通过安装程序或 Terraform 安装。 |
Stackube | 以 Kubernetes 为中心的 OpenStack 发行版。可根据所用容器运行时环境提供不同程度的多租户机制,用户可选择 Docker 或者虚拟机进行配置。 | KDC 和 Containerum 平台都是 100%开源 | 设置相对容易 |
Rancher | 包含 Kubernetes 的容器管理平台。主要特点如下:跨供应商集群部署、用户管理 Web、用户界面、集成 CI/CD 管道。 | 100%开源,该公司可提供咨询和支持服务 | 可使用名为 RKE 的 Kubernetes 安装工具。 |
Canonical Distribution of Kubernetes( CDK ) | 由 Linux 发行版 Ubuntu 背后的公司 Canonical 支持,相当于是一个可在主流公有云提供商和 OpenStack 等私有云解决方案上轻松部署的 vanilla Kubernetes,能够轻松设置并管理跨供应商的 Kubernetes 集群,用户界面是官方 Kubernetes 仪表板。 | 完全免费。但是,每个虚拟节点有几个支持包 | 可使用 Canonical 开发的部署工具 Conjure-up 或 Juju 来完成安装。 |
Docker 社区版 /企业版 | Docker Enterprise 3.0 添加了 Docker Kubernetes 服务 | ||
Pivotal 容器服务 ( PKS ) | 突出的特性是与 VMware 虚拟机堆栈紧密集成。 | ||
SUSE 容器服务平台 | SUSE CaaS 平台让人想起 CoreOS Tectonic,它结合了运行容器的裸机“微型”操作系统、Kubernetes、内置的镜像仓库和集群配置工具。 |
下载并解压 Kubernetes 二进制文件
$ git clone https://github.com/kubernetes/kubernetes.git
- 翻墙访问: googleapis. com gcr.io
# ./kubernetes/server/bin/kube-apiserver.tar # 目标二进制文件
$ ./kubernetes/cluster/get-kube-binaries.sh
- 国内源下载: apt-get install
组件 | 下载入口 | 备注 |
---|---|---|
kubectl | k8s | 集群命令的管理工具 |
minikube | minikube 下载 | 缺省 Minikube 使用 VirtualBox 驱动来创建 Kubernetes 本地环境-单节点集群。 |
kubeadm | 高可用。部署一个完整的 k8s 集群。 |
k8s-for-docker-desktop
https://github.com/AliyunContainerService/k8s-for-docker-desktop
最简单使用 K8S 集群的试是直接使用 Windows or Mac 上的 Docker Desktop 内置 K8s。
图形端配置镜像仓库
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn", //中科大
"https://registry.docker-cn.com"
],
"insecure-registries": [],
"debug": false,
"experimental": false,
"features": {
"buildkit": true
}
}
图形端上启用 K8S
# 启用步骤
# step1: Settings- Kubernates 勾选 Enable Kubernates.
# step2: 勾选后会尝试下载 k8s 所需镜像,如果可以下载并成功,则左下角 k8s 显示图标是绿色的。
# step3: 如果无法直接访问镜像,图标会显示红色警告;则需要进行下面步骤,手动下载镜像
# 下载项目后,拉取镜像
git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop
./load_images.sh
# kubectl 查看集群信息:cluster-info, version, get nodes
# 此时 k8s 集群原始状态是(也是 reset cluster 状态)
# ns: default 是缺省,若资源未指定 ns,则指向此处;kube-system 是 k8s 集群本身
% kubectl get ns --show-labels
NAME STATUS AGE LABELS
default Active 4m39s kubernetes.io/metadata.name=default
kube-node-lease Active 4m41s kubernetes.io/metadata.name=kube-node-lease
kube-public Active 4m41s kubernetes.io/metadata.name=kube-public
kube-system Active 4m41s kubernetes.io/metadata.name=kube-system
启用 dashboard 查看 k8s 集群
# 创建 dashboard 资源。yaml 文件可以是本地的也可以线上的。
% kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.2/aio/deploy/recommended.yaml
# 或者 本地文件
% kubectl apply -f kubernetes-dashboard.yaml
# 查看 Deployment 的运行状态
% kubectl get deployment -n kubernetes-dashboard
NAME READY UP-TO-DATE AVAILABLE AGE
dashboard-metrics-scraper 1/1 1 1 15h
kubernetes-dashboard 1/1 1 1 15h
# 查看 Pod 的运行状态
% kubectl get pod -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-c45b7869d-k9qvx 1/1 Running 0 15h
kubernetes-dashboard-79b5779bf4-h4zg6 1/1 Running 0 15h
# 查看 service 的运行状态
% kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.100.169.128 <none> 8000/TCP 19h
kubernetes-dashboard ClusterIP 10.101.216.148 <none> 443/TCP 19h
# 查看方式:
# 法 1:ClusterIP 访问
# 需先开启 API Server 访问代理 dashboard,需要启动 kubectl proxy,
% kubectl proxy
Starting to serve on 127.0.0.1:8001
网页 URL:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
# 法 2:NodePort 访问,NodePort 方式是 https 访问,需要申请证书。优先 chrome 之外浏览器
# 修改 yaml 文件,在 Service 项修改如下
Service:
spec:
type: NodePort #新
# 或者启动后修改,将 type: ClusterIP 改为 type:NodePort,会随机分配端口
kubectl -ns=kubernetes-dashboard edit service kubernetes-dashboard
访问 URL: https://IP:PORT/
授权 kube-system
默认服务账号
# 生成默认服务账号:default
kubectl apply -f kube-system-default.yaml
登陆 dashboard 需要鉴权,支持以下二种方式:
一是 Token 方式。每个 Service Account 都有一个合法的 Bearer Token ,可用于登录 Dashboard 。 要了解有关如何配置和使用 Bearer Tokens 的更多信息,请参阅 身份验证 部分。
# windows 环境:使用 Select-String $TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1] kubectl config set-credentials docker-for-desktop --token="${TOKEN}" echo $TOKEN # mac 环境:使用 awk TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}') kubectl config set-credentials docker-desktop --token="${TOKEN}" echo $TOKEN # 或者 执行下面命令,粘贴 token: 后面的值,用户是 default kubectl describe secret -n kube-system default
二是 Kubeconfig 方式。创建的 kubeconfig 文件以配置对集群的访问权限。 要了解有关如何配置和使用 kubeconfig 文件的更多信息, 请参阅 配置到多个集群的访问 部分。
# kubeconfig 文件路径
Mac: $HOME/.kube/config
Win: %UserProfile%\.kube\config
# kubeconfig 文件流程:
# step1: 生成 xxx 账号对应的 token;
# step2: 将 k8s 集群配置信息、token 信息、用户信息、上下文信息写入到文件~/.dashboard-admin.conf
#. step3: 将配置信息导入到客户端本地
# 查看刚才创建的 token 名称,名称为:dashboard-admin-token-xxx
$ kubectl get secrets -n kube-system | grep dashboard
dashboard-admin-token-22n2v kubernetes.io/service-account-token 3 11m
# 查看 token 的详细信息,会获取 token
$ kubectl describe secrets -n kube-system dashboard-admin-token-22n2v
# 将 token 的信息生成一个变量
$ DASH_TOKEN=$(kubectl get secrets -n kube-system dashboard-admin-token-22n2v -o jsonpath={.data.token} | base64 -d)
# 1)将 k8s 集群的配置信息写入到一个文件中,文件可自定义
$ kubectl config set-cluster kubernets --server=192.168.10.52:6443 --kubeconfig=/Users/keefe/.dashboard-admin.conf
Cluster "kubernets" set.
# 2)将 token 的信息也写入到文件中(同一个文件)
$ kubectl config set-credentials dashboard-admin --token=${DASH_TOKEN} --kubeconfig=/Users/keefe/.dashboard-admin.conf
User "dashboard-admin" set.
# 3)用户信息也写入文件中(同一个文件)
$ kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/Users/keefe/.dashboard-admin.conf
Context "dashboard-admin@kubernetes" created.
# 4)将上下文的配置信息也写入文件中(同一个文件)
$ kubectl config use-context dashboard-admin@kubernetes --kubeconfig=/Users/keefe/.dashboard-admin.conf
Switched to context "dashboard-admin@kubernetes".
# 最后将配置信息导入到客户端本地
$ sz /Users/keefe/.dashboard-admin.conf
minikube
K8S 官方为了开发者能在个人电脑上运行 K8S 而提供的一套工具。实现上是通过 Go 语言编写,通过调用虚拟化管理程序,创建出一个运行在虚拟机内的单节点集群。Minikube CLI 可用于启动,停止,删除,获取状态,并在虚拟机上执行其他操作。一旦 Minikube 虚拟机启动,Kubectl CLI 会在 Kubernetes 集群上执行操作。
$ curl -Lo minikube https://github.com/kubernetes/minikube/releases/download/v1.7.3/minikube-linux-amd64
$ chmod +x minikube && sudo mv minikube /usr/local/bin
# 启动方式 1:Minikube 缺省使用 VirtualBox 驱动,windows 环境下 vbox 和 hyper-v 只能选择一个
$ minikube start --registry-mirror=https://registry.docker-cn.com
# 启动方式 2:安装了 docker, none driver
$ minikube start --vm-driver=none --registry-mirror=https://registry.docker-cn.com
# 打开 k8s 控制台
$ minikube dashboard
kubeadm
k8s 官网推荐用 kubeadm 工具部署一个完整的 k8s 集群。
安装
# apt-get 方式安装
# 安装必需工具
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 增加国内镜像 apt 源:https://mirrors.aliyun.com/kubernetes/apt/
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
$ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
# 安装 kubeadm
$ apt-get update
$ apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
常用命令
kubeadm init #初始化集群;
kubeadm join #加入集群;
mater,node: 安装 kubelet, kubeadm, docker
master: kubeadm init
nodes: kubeadm join
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论