1. k8s集群安装
一种是通过Play with K8S网站,在线体验k8s集群的使用,无需自行安装虚拟机及相关镜像文件。具体过程可参考:在线免费搭建k8s集群体验
另一种通过在虚拟机上自行安装多个系统并进行配置,其中可能会遇到多个虚拟机之间的网络通信问题等,主要可参考Blog①和②,在虚拟机上搭建k8s集群主要参考Blog③和④ ,本人使用的是CentOS 7 64位系统,k8s版本为v1.18.0。
参考Blog④:kubernetes 集群搭建(kubeadm 方式)
可配置私有仓库Harbor
2. K8S中的资源介绍
2.1 资源简介
K8S中所有的内容都抽象为资源,资源实例化之后叫做对象。
集群资源分类:
名称空间级别:仅在一定的名称空间下生效。比如通过kubeadm安装k8s集群时,会把系统组件放在kube-system名称空间下运行,如果直接通过kubectl get pod获取pod信息时,是无法获得在kube-system名称空间下的资源的。(因为kubectl get pod命令默认获得的是default名称空间下的资源)。
①工作负载型资源( workload ): Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、 CronJob ( ReplicationController 在 v1.11 版本被废弃 ) ;
②服务发现及负载均衡型资源( ServiceDiscovery LoadBalance ): Service、Ingress、…;
③配置与存储型资源: Volume( 存储卷 )、CSI( 容器存储接口,可以扩展各种各样的第三方存储卷 )
④特殊类型的存储卷:ConfigMap( 当配置中心来使用的资源类型 )、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)
集群级别:比如role,不管在什么名称空间下定义资源,在其他名称空间下都可以看到这些资源。
举例:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
元数据型:比如HPA,可以通过CPU当前的利用率平滑扩展,这是一个典型的元数据型,通过指标进行操作。
举例:HPA、PodTemplate、LimitRange
2.2 资源清单
K8S 中一般用 yaml 格式文件创建符合预期期望的 pod ,将 yaml 文件一般称为资源清单。关于YAML文件的格式查看其他文档。
使用yaml定义资源时常用的字段
必须存在的属性:
主要对象有
其他额外的一些参数项有
资源清单格式
apiVersion: group/apiversion # 如果没有给定 group 名称,那么默认为 core,可以使用 kubectl apiversions # 获取当前 k8s 版本上所有的 apiVersion 版本信息( 每个版本可能不同 )
kind: Pod #资源类别
metadata: #资源元数据
name:
namespace:
lables:
annotations: # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义
#---------------------可以看下面的一个例子
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: default
labels:
app: myapp
version: v1
spec:
containers:
- name: app
image: hub.aiguigu.com/library/myapp:v1
#创建pod.yaml文件之后,终端运行如下命令即可创建pod
kubectl apply -f pod.yaml
#或者采用如下命令
kubectl create -f pod.yaml
当pod出现错误时,一般可以采用如下的解决思路:
首先终端输入kubectl describe pod pod的名称,查看pod哪些容器出现错误
然后查看日志 比如查看pod中指定容器的log kubectl log myapp-pod -c test-container
资源清单的常用命令
# 获取 apiversion 版本信息
kubectl api-versions
# 获取资源的 apiVersion 版本信息
kubectl explain pod
kubectl explain Ingres
# 获取字段设置帮助文档
kubectl explain pod
kubectl explain pod.version
### 字段配置格式
apiVersion <string> #表示字符串类型
metadata <Object> #表示需要嵌套多层字段
labels <map[string]string> #表示由k:v组成的映射
finalizers <[]string> #表示字串列表
ownerReferences <[]Object> #表示对象列表
hostPID <boolean> #布尔类型
priority <integer> #整型
name <string> -required- #如果类型后面接 -required-,表示为必填字段
通过定义清单文件创建 Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
spec:
containers:
- name: myapp-1
image: hub.atguigu.com/library/myapp:v1
- name: busybox-1
image: busybox:latest
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
kubectl get pod xx.xx.xx -o yaml
# <!--使用 -o 参数 加 yaml,可以将资源的配置以 yaml的格式输出出来,也可以使用json,输出为json格式-->