近期持续完善中…

Kubernetes主要由以下几个核心组件组成:
控制平面组件会为集群做出全局决策,比如资源的调度以及检测和响应集群事件,例如当不满足部署的 replicas 字段时, 要启动新的 pod)。控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。
节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行环境。
除了核心组件,还有一些推荐的Addons:
Kubernetes 的资源分为两种属性

调度主要分为以下几个部分:
Namespace 查看
kubectl get ns

普通 Pod
静态 Pod
Pod 也被认为是相对临时性(而不是长期存在)的实体。 Pod 会被创建、赋予一个唯一的 ID(UID), 并被调度到节点,并在终止(根据重启策略)或删除之前一直运行在该节点。
Pod 阶段
| 取值 | 描述 |
|---|---|
| Pending(悬决) | Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。 |
| Running(运行中) | Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。 |
| Succeeded(成功) | Pod 中的所有容器都已成功终止,并且不会再重启。 |
| Failed(失败) | Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。 |
| Unknown(未知) | 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。 |

将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
app.kubernetes.io/name=MyApp 的 Pod 上。apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
- name: https
protocol: TCP
port: 443
targetPort: 9377
Type 的取值以及行为如下:
你也可以使用 Ingress 来暴露自己的服务。 Ingress 不是一种服务类型,但它充当集群的入口点。 它可以将路由规则整合到一个资源中,因为它可以在同一 IP 地址下公开多个服务。

必须拥有一个
Ingress 控制器才能满足 Ingress 的要求。 仅创建 Ingress 资源本身没有任何效果。
由单个 Service 来完成的 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
spec:
defaultBackend:
service:
name: test
port:
number: 80
简单扇出

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-fanout-example
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
pathType: Prefix
backend:
service:
name: service1
port:
number: 4200
- path: /bar
pathType: Prefix
backend:
service:
name: service2
port:
number: 8080
基于名称的虚拟托管

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service2
port:
number: 80
为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。
Container 中的文件在磁盘上是临时存放的,这给 Container 中运行的较重要的应用程序带来一些问题。 问题之一是当容器崩溃时文件丢失。 kubelet 会重新启动容器,但容器会以干净的状态重启。 第二个问题会在同一 Pod 中运行多个容器并共享文件时出现。
emptyDir、hostPath、configMap、nfs、iscsi、rbd、cephfs、secret、persistentVolumeClaim、downwardAPI等。
管理存储是管理计算的一个明显问题。PersistentVolume 子系统为用户和管理员提供了一个 API,用于抽象如何根据消费方式提供存储的详细信息。两个新的API 资源:
PersistentVolume和PersistentVolumeClaim。
Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。
Pod 可以用三种方式之一来使用 Secret:
Secret 有三种类型
/run/secrets/kubernetes.io/serviceaccount 目录中。liveness probe 和 readiness probe。liveness probe(存活探针)
readiness probe(就绪探针)
每类探针都支持三种探测方法:
探针探测的结果
Pod 重启策略:
kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。
查看各个组件的简写
kubectl api-resources
查看所有node
kubectl get nodes
查看所有pod
kubectl get pods
kubectl create 生成yaml
kubectl create deployment web --image=nginx -o yaml --dry-run > nginx.yaml
kubectl get 导出yaml
kubectl get deploy nginx -o=yaml --export > nginx.yaml
创建新的deployment
kubectl create -f nginx.yaml
创建一个service
kubectl create service nodeport nginx --tcp 80:80
另一种方式创建service
kubectl expose deployment nginx --type=NodePort
查看某一个service的详情
kubectl describe services/nginx
查看所有service
kubectl get svc
删除pod和svc
kubectl delete deployments/nginx services/nginx
在master节点上查看slave node的ip
kubectl get nodes -o wide
在master节点上,查看所有pods
kubectl get pods -o wide
实现 Pod 的动态缩放功能
kubectl scale rc nginx --replicas=5
查看版本
ctr -v
查看已经存在的images
crictl images list
重启containerd服务
systemctl restart containerd
crictl 去 pull 镜像
crictl pull harbor.kingsd.top/ksd/ubuntu:16.04
你知道的越多,你不知道的越多。