返回介绍

3.1 安装准备

发布于 2024-09-23 22:52:23 字数 11284 浏览 0 评论 0 收藏 0

Kubernetes 网站 上有多种搭建 Kubernetes 集群的方法,例如 minikube、kubeadm 等。

Kubernetes 可以在多种平台运行,从笔记本电脑,到云服务商的虚拟机,再到机架上的裸机服务器。要创建一个 Kubernetes 集群,根据不同场景需要做的也不尽相同,可能是运行一条命令,也可能是配置自己的定制集群。

  • 本地服务器方案:包括三种,分别是本地 Docker、Vagrant 和无虚拟机本地集群(Linux)。基于 Docker 的本地方案:是众多能够完成快速搭建的本地集群方案中的一种,但是局限于单台机器。
  • 托管解决方案(如 Google Container Engine)是最容易搭建和维护的。当你准备好扩展到多台机器和更高可用性时。
  • 全套云端方案(如 AWS、Azure 等):只需要少数几个命令就可以在更多的云服务提供商搭建 Kubernetes。
  • 定制方案 需要花费更多的精力,但是覆盖了从零开始搭建 Kubernetes 集群的通用建议到分步骤的细节指引。

表格 5 Kubernatess 发行版

发行版简介许可和定价模型安装
原版开源 KubernetesKubernetes 由 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

  1. 翻墙访问: googleapis. com gcr.io
# ./kubernetes/server/bin/kube-apiserver.tar  # 目标二进制文件
$ ./kubernetes/cluster/get-kube-binaries.sh
  1. 国内源下载: apt-get install
组件下载入口备注
kubectlk8s集群命令的管理工具
minikubeminikube 下载缺省 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 #加入集群;
  1. mater,node: 安装 kubelet, kubeadm, docker

  2. master: kubeadm init

  3. nodes: kubeadm join

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文