Kubeadm CNCF:将kubernetes集群使用容器化方案运行安装,缺点就是需要科学上网下载、集群证书有效期为一年,优点:安装简单、自愈性。

k8s资源

k8s中所有的内容都抽象为资源,资源实例化之后,叫做对象。所以pod、node 都可以称为资源,master节点可称为对象。

如果想要掌握、控制k8s集群,就要管理资源,以及由资源转化为对象之间的关系。即将系统赋予的资源转化为一个个可用的对象。

资源分类

命名空间级别

  • 工作负载型资源:pod、replicaset、Deplooyment、job、
  • 服务发现及负载均衡资源:Service、Ingress
  • 配置与存储型资源:Volume、CSI
  • 特殊类型的存储卷:ConfigMap、Secre

集群级资源

  • Namespace 、Node、ClusterRole、ClusterRoleBinding

    NameSpace(名字空间)如果不做资源限制,他可以使用到当前集群的最大资源

元数据型资源

  • HPA、PodTemplate、LimitRange

资源清单

在k8s中,一般使用yaml格式的文件来创建符合我们预期的pod,这样的yaml文件我们一般称之为资源清单

# 列出资源清单
kubectl create deployment myapp -image=imageName:tag --dry--run -o yaml

# 以下命令为“创建一个deployment实例化,名字叫myapp,使用镜像imageName:tag
kubectl create deployment myapp -image=imageName:tag
#只测试不运行 
--dry--run
#将实例对象转化为yaml格式输出
-o yaml

同理:通过自定义编辑好的yaml文件,提交给k8s集群

kubectl create -f myapp-dep.yaml
#kubectl create 官方定义为:从文件或 stdin 创建一个或多个资源。
kubectl create -f FILENAME [flags]

底层原理:yaml文件通过kubectl提交,kubectl在提交前会将yaml文件转换为json格式,之后发送到apiserver。(不管什么语言对json的处理要比对yaml处理更高效)

资源清单格式

#如果没有给定 group 名称,那么默认为 core,可以使用 kubectl api-versions # 获取当前 k8s 版本上所有的apiVersion 版本信息( 每个版本可能不同 )。
apiVersion: group/apiversion
kind:       #资源类别,pod、service...
metadata:  #资源元数据
   name
   namespace
   lables
   annotations   # 主要目的是方便用户阅读查找
spec: # 期望的状态(disired state)
status:# 当前状态,本字段有 Kubernetes 自身维护,用户不能去定义

获取资源清单的命令

# 获取 apiversion 版本信息
kubectl api-versions

# kubectl explain [--recursive=false] [flags]	
# 获取多种资源的文档。例如 pod, node, service 等。
kubectl explain pod
kubectl explain rc #官方也支持控制器的缩写方式,但在资源清单中kind:标签后必须写全称。

#也可以获得资源下的一级字段信息(顶级字段)
kubectl explain pod.matadata
# 所以只要是一级字段下的子对象都可以查询出来
kubectl explain pod.matadata.name

字段配置格式

apiVersion <string>          #表示字符串类型
metadata <Object>            #表示需要嵌套多层字段
labels <map[string]string>   #表示由k:v组成的映射
finalizers <[]string>        #表示字串列表
ownerReferences <[]Object>   #表示对象列表
hostPID <boolean>            #布尔类型
priority <integer>           #整型
name <string> -required-     #如果类型后面接 -required-,表示为必填字段

通过定义清单文件完成资源创建

apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-1
    image: harbor.hongfu.com/library/myapp:v1
  - name: busybox-1
    image: harbor.hongfu.com/library/busybox:v1
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"
kubectl get pod xx.xx.xx -o yaml  
<!--使用 -o 参数 加 yaml,可以将资源的配置以 yaml的格式输出出来,也可以使用json,输出为json格式--> 

当然在创建资源清单时,每行内容都通过查询的方式逐行完善的方法过于繁琐;所哟我们可以查询已有资源的资源清单完成二次创建

#例:制作一个kube-proxy资源
# 查询现有的kube-proxy的资源清单
kubectl get pod -n kube-system kube-proxy-22dbd -o yaml #kube-system 命名空间下的 name是kube-proxy-22dbd的pod

kubectl get pod -n kube-system kube-proxy-22dbd -o yaml > /root/pod.yaml

# 这样pod.yaml中就保存了现有pod的资源清单,针对其中内容进行修改后
# 就可以进行创建了
# kubectl create - 通过文件或标准输入来创建资源
kubectl create -f pod.yaml
# kubectl describe - 显示某个资源或某组资源的详细信息
kubectl decribe pod podname
# 其结果 Events 显示事件结果

#查看pod日志
kubectl logs test

# 删除pod
kubectl delete pod podname
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐