Skip to main content

k8s学习 - 安装和常用概念小结

本文用 kubespray 安装生产环境,根据 kubespray github,kubespray 用 ansible-playbook 做运维工具。

Kubespray 用到的工具 Ansible-Playbook

ansible-playbook 就是自动化部署主机,给出所有主机的地址和master机的ssh凭证,它自动在每台主机做好安装、启动的工作。

按照 kubespray 的 Quick Start 去安装就好了。

解决 k8s.gcr.io 难缠的问题

gcr 是 k8s 在大陆安装必定出现的问题。因为 k8s 的版本一直在更新,所以你永远不知道会下载什么版本,所以如果用最新版的 kubespray 部署,网上给出的各种镜像版本很容易过时,下载好了发现版本错了。所以最好的方法是:

在云端租一台境外的临时服务器,直接部署 kubespray!

这里不介绍任何云服务商,挑自己喜欢的租就行。在境外部署完全没有此类问题,部署好了,把镜像保存下来,复制要部署的机器。拿 docker 为例:

# 境外临时机器
docker save k8s.gcr.io/pause:3.3 -o pause.tar
# 生产环境机器
docker load -i pause.tar

安装完成

ansible 安装完 k8s 后,就可以用 kubectl 了。觉得 kubectl 难打的,可以用 alias 设定快捷指令。

(来自 microk8s 启发)

alias kc="kubectl"
alias ka="kubectl apply"

常用资源概念解析

k8s有很多编排术语,在这里以 docker 迁移到 k8s 的身份,简单解释里面的一些概念。

Pod

pod 相当于 container,但是一个 pod 可以跑很多个 container,不过为了分工明确,建议一个 pod 跑一个 container。

kubectl get pod
kubectl get pods

Deployment

deployment 相当于 docker service,告诉 k8s 如何部署应用。常用的功能:

  • 需要哪些存储需求,存储要多大空间,等。
  • 创建的 pod 跑多少容器、容器跑什么镜像、用到什么端口、存储卷挂载到哪个位置、pod 崩了怎么处理,等。
  • 在哪些节点部署。
kubectl get deploy
kubectl get deployment

Volume (卷)

描述临时的卷,如果 Pod 结束了或是崩了,卷会被清掉。

PersistentVolume (PV) (持久卷)

持久卷就是 Pod 用完了也不会被删掉的卷。下面所说的卷都指代 “持久卷”。

相当于 docker volume,有很多种存储实现,比如 nfs、本地存储、Azure。并且可以指定这个卷最大存储空间。

kubectl get pv

PersistentVolumeClaim (PVC) (卷需求)

描述一个对存储的需求,告诉 k8s 需要哪种持久卷(PV),k8s 找到合适的卷会将 PVC 绑定起来。例子:

  • PVC 要求有 10G 存储空间的 PV,k8s 找到一个存储有 20G 的 PV,则 PVC 绑定到该 PV。

  • PVC 要求有 10G 存储空间的 PV,k8s 只找到存储有 5G 的 PV,则 PVC 一直挂起。

PVC 带有名称,Pod 配置好 PVC 后,Pod 就可以挂载 PVC 绑定的卷(PV)了。

kubectl get pvc

StorageClass (SC) (存储类)

存储类描述存在 卷需求(PVC),但是没有合适的卷(PV),此时如果 PVC 的配置中指定了某个存储类(SC),则该存储类尝试为 PVC 创建合适的卷。按照官方文档,这个过程叫 “动态分配卷”。

kubectl get storageclass
kubectl get sc

Service

描述如何分配IP和端口给应用。比如:

  • 对于一群 Pod,提供IP和端口,让外部访问这些 Pod。
kubectl get service
kubectl get svc

Node (节点)

相当于 docker node。即 k8s 的节点,节点角色 表示为 Worker 节点,Worker节点不带 kubectl。

kubectl get node