1.命名空间(namespace)

一组资源集中管理的一个空间成为一个命名空间
默认命名空间为default
默认的命令行操作都为在当前命名空间下的操作

创建命名空间的两种方式

# 命令行创建命名空间
kubectl create ns helloword  # 创建helloword的命名空间  ns是namespace的简写
# 删除命名空间
kubectl delete ns helloworld

yaml文件方式创建命名空间

# 创建文件
vi helloworld.yaml

# 添加以下内容
apiVersion: v1
kind: Namespace
metadata:
  name: helloworld

# 保存退出并执行命令
kubectl apply -f helloworld.yaml

# 删除创建的命令空间
kube delete -f helloworld.yaml

ps:命名空间和命名空间之间网络不隔离,仅仅是资源隔离,可以互相访问,也可以做网络隔离操作

2.Pod

Pod是k8s可执行的最小工作单元

Pod是对docker的封装,但是一个Pod可以封装多个docker

下图一组Pod列表

k8s命名空间设置docker源 k8s默认命名空间_k8s命名空间设置docker源

# NAMESPACE  命令空间
# NAME       Pod的名称
# READY      就绪状态
             其中1/1表示表示Pod内部有一个容器,如果为2/3表示Pod内部有3个容器,2个已经正常启动
# STATUS     Pod的状态(需要展开讲 很多)
              pod的几种状态:
              1)Pending:Pod创建已经提交给k8s,但是因为某种原因不能顺利创建,例如下载镜像慢,调度不成功等。
              2)Running:Pod已经绑定到一个节点上了,并且已经创建了所有容器。只是有一个容器正在运行,或者在启动中。
              3)Secceeded:Pod中的所有容器都已经成功终止,不能重新启动。
              4)Failed: Pod中所有的容器均已经终止,且至少有一个容器已经在故障中终止。
              5)Unkown:由于某中原因apiserver无法获取到Pod的状态。通常是由于Master与pod所在的主机失去连接了。

            CrashLoopGBackOff: #pod,但是kubelet正在将它重启
# RESTARTS 重启次数(Pod服务出错,k8s会尝试进行重启)
# AGE      Pod的年龄(创建了多久)

Pod相关操作

# 获取当前命名空间下的所有Pod
kubectl get pods
# 获取所有命名空间下的Pod
kubectl get pod -A
# 查看一个pod的信息(执行流程和故障码等)
kubectl describe pod <pod的name> -ns 命名空间名称
# 删除pod
kubectl delete pod <pod 的 NAME>
# 查看pod的日志信息
kubectl logs <podName>
# 查看pod的IP节点等详细信息等(需要补充完整)
kubectl get pod -owide

k8s命名空间设置docker源 k8s默认命名空间_k8s命名空间设置docker源_02

创建Pod的两种方式

# 命令创建
kubectl run pod <podName>  --image=<镜像名称>

# yaml文件创建 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx

# yaml文件创建  一个Pod内部有多个容器
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat:8.5.68
    name: tomcat
# 执行命令
kubectl apply -f <yaml文件名称>

每个Pod会对应一个IP地址
ps:同一个Pod如果多个容器占用一个端口会造成Pod启动失败而不断重启

3.Deployment(部署)

控制Pod,使Pod拥有多副本,自愈,扩容缩容能力

# 创建一次deployment 选用tomcat镜像
kubectl create deployment mytomcat --image=tomcat:8.5.68

# 获取当前命名空间内的部署
kubectl get deployment

# 删除deployment
kubectl delete deployment <deployment名称>

deployment具有自愈能力,如果只是删除一次deployment中的某个pod deployment会自动进行恢复,需要删除deployment才有效

deployment的创建也可以使用yaml的方式

# 多副本创建
kubectl create deployment my-dep --image=nginx --replicas=3

# 多副本创建(yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

# 集群的扩容和缩容 修改replicas的数字
kubectl scale --replicas=5 deployment/my-dep

# 集群的扩缩容,使用编辑yaml文件
kubectl edit deployment my-dep  修改replicas

版本控制

#历史记录
kubectl rollout history deployment/my-dep


#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2

#回滚(回到上次)
kubectl rollout undo deployment/my-dep

#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2

其他的工作负载

k8s命名空间设置docker源 k8s默认命名空间_Pod_03

4.Service

将一组Pod公开为网络服务的抽象(Pod的路由)

#暴露Deploy
kubectl expose deployment my-dep --port=8000 --target-port=80

#使用标签检索Pod
kubectl get pod -l app=my-dep

#使用yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  selector:
    app: my-dep
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80

1.ClusterIP(集群内部访问 默认)

# 等同于没有--type的
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP

# yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
  selector:
    app: my-dep
  type: ClusterIP

2.NodePort(集群外部访问)

kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort

# yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 80
  selector:
    app: my-dep
  type: NodePort

NodePort范围在 30000-32767 之间