k8s 入门指南
# 前言
官方中文文档:Kubernetes 文档 | Kubernetes (opens new window)
注:本次使用版本为 Kubernetes v1.20.2,系统配置 CentOS 7.9
我在使用最新 1.28 版本某些镜像拉取失败,后面降到 1.20 ,但是也遇到同样问题,不过已解决,同时暂时没有使用最新版功能需求,也就索性没有再升级到 1.28。如果有需求可以直接安装最新版,文末也会给出升级版本的步骤
除此之外,如果有条件的推荐使用 Ubuntu 系统,官方社区长期维护,比较稳定
# Docker
# 安装
官方文档:Install Docker Engine on CentOS | Docker Docs (opens new window)
安装脚本如下
#!/bin/bash
set -e
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run hello-world
2
3
4
5
6
7
8
9
# 配置加速 (可选)
阿里云镜像加速地址:容器镜像服务_镜像构建_镜像授权_镜像托管-阿里云 (aliyun.com) (opens new window)
然后复制上面地址,执行如下命令
# 更换镜像为阿里云
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl restart docker
docker info
2
3
4
5
6
7
8
# 集群搭建
k8s 集群搭建有三种方式,目前主流的搭建 k8s 集群的方式有 kubeadm、minikube,二进制包
# kubeadm
- 是一个工具,用于快速搭建kubernetes集群,目前应该是比较方便和推荐的,简单易用
- kubeadm是Kubernetes 1.4开始新增的特性
- kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群
# minikube
- 一般用于本地开发、测试和学习,不能用于生产环境
- 是一个工具,minikube快速搭建一个运行在本地的单节点的Kubernetes
# 二进制包
- 在官网下载相关的组件的二进制包,上面的两个是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,前两者属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少,遇到问题很难排查,如果手动安装,对kubernetes理解也会更全面。
- 目前生产环境的主流搭建方式,已在生产环境验证,kubeadm 也可以搭建生产环境,不过 kubeadm 应该还没有被大规模在生产环境验证
# Minikube
官方教程:minikube start | minikube (k8s.io) (opens new window)
# 安装
curl -Lo minikube "https://storage.googleapis.com/minikube/releases/v1.18.1/minikube-linux-amd64"
chmod +x minikube && sudo mv minikube /usr/local/bin/
2
# 启动集群
需要使用非 root 用户权限运行,如果使用 root 运行,需要添加参数 --force
# 国外线路启动
minikube start \
--driver=docker \
--force
# 国内线路启动
minikube start \
--driver=docker \
--image-mirror-country=cn \
--registry-mirror=https://registry.docker-cn.com \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--force
2
3
4
5
6
7
8
9
10
11
12
这里面可能遇到网络问题,导致下载二进制包失败
还可以参考如下 issue,也可以配置代理
问题:Exiting due to INET_DOWNLOAD_TIMEOUT: updating control plane: downloading binaries: downloading kubelet: download failed
因为这些二进制包下载之后会缓存到 $MINIKUBE_HOME/.minikube/cache/$KUBE_VERSION/
,比如说~/.minikube/cache/v1.13.3
,那么我们需要的就是单独下载这些包,然后上传到对应文件夹下即可
我在上面的 issue 中找到一位老哥写的脚本,可以实现离线打包 k8s 启动,比较方便
仓库地址:kingonion/minikube-on-linux (opens new window)
更加方便的方法就是单独下载 kubeadm、kubelet 和 kubectl(直接跳转下面对应章节即可),这样的话这里 minikube 启动集群就不会出现超时错误
# 启动仪表盘
然后打开 Web 仪表盘,之后我们就可以在浏览器上创建 Kubernetes 资源,例如 Deployment 和 Service
# 打开仪表盘
minikube dashboard
# 不打开仪表盘,仅输出 url
minikube dashboard --url
2
3
4
注:要停止代理,请运行
Ctrl+C
退出该进程。仪表板仍在运行中。 命令退出后,仪表板仍然在 Kubernetes 集群中运行。 你可以再次运行dashboard
命令创建另一个代理来访问仪表板
# kubeadm、kubelet 和 kubectl
# kubectl
官方文档:在 Linux 系统中安装并设置 kubectl | Kubernetes (opens new window)
安装命令
curl -Lo kubectl "https://storage.googleapis.com/kubernetes-release/release/v1.20.2/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
2
# kubeadm 和 kubelet
官方文档:安装 kubeadm | Kubernetes (opens new window)
kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。
kubeadm 不能帮你安装或者管理 kubelet 或 kubectl, 所以你需要确保它们与通过 kubeadm 安装的控制平面的版本相匹配。 如果不这样做,则存在发生版本偏差的风险,可能会导致一些预料之外的错误和问题。 然而,控制平面与 kubelet 之间可以存在一个次要版本的偏差,但 kubelet 的版本不可以超过 API 服务器的版本。 例如,1.7.0 版本的 kubelet 可以完全兼容 1.8.0 版本的 API 服务器,反之则不可以。
执行如下脚本 (自行替换版本),这是国外线路,由于网络原因实测失败
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.20.2/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.20.2/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
2
3
4
5
6
7
8
9
10
11
这是国内线路(实测成功)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubelet-1.20.2 kubeadm-1.20.2 kubectl-1.20.2 --disableexcludes=kubernetes
systemctl enable --now kubelet
2
3
4
5
6
7
8
9
10
11
# 版本说明
Kubernetes 版本表示为 x.y.z, 其中 x 是主要版本,y 是次要版本,z 是补丁版本
如果我们想要为 k8s 挑选生产环境的合适版本,可以参考各大云厂商,诸如华为,百度,微软,谷歌等,下面给出谷歌的版本发布表,供大家参考
文档:GKE 发布时间表 | Google Kubernetes Engine (GKE) | Google Cloud (opens new window)