P41 、核心实战——操作NameSpace

1、资源创建方式
● 命令行
● YAML

2、Namespace
名称空间用来隔离资源
在这里插入图片描述

#获取k8s的名称空间
 kubectl get ns

每一个部署的应用有所属的名称空间
在这里插入图片描述
只看某个名称空间的pod命令:

                 -n 指定看kube-system的pod
kubectl get pods -n kube-system
kubectl create ns hello  #创建名称空间
kubectl delete ns hello  #删除名称空间

可以在控制面板看到创建的hello名称空间:
在这里插入图片描述
删除名称空间,其底下的资源会连带删除,所以要谨慎删除。

用yaml文件创建名称空间:

apiVersion: v1
kind: Namespace
metadata:
  name: hello

创建成功如图:
在这里插入图片描述
一般用yaml创建的就用yaml删除:

kubectl delete -f hello.yaml 

在这里插入图片描述

P42 、核心实战——理解pod

在这里插入图片描述

P43 、核心实战——kubectl命令行方式创建第一个pod

创建pod

kubectl run mynginx --image=nginx
# 查看default名称空间的Pod
kubectl get pod 

# 删除
kubectl delete pod Pod名字
# 查看Pod的运行日志
kubectl logs Pod名字

# 每个Pod - k8s都会分配一个ip
kubectl get pod -owide
# 使用Pod的ip+pod里面运行容器的端口
curl 192.168.169.136

# 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod
# 描述
kubectl describe pod 你自己的Pod名字

主要看events如图:
在这里插入图片描述
怎么查看容器是否在node2里呢?可以执行docker ps,因为底层是docker在运行。
在这里插入图片描述

P44、核心实战——配置文件方式创建一个pod

yaml文件内容如下:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
#  namespace: default
spec:
  containers:
  - image: nginx
    name: mynginx

创建该pod资源:

kubectl apply -f pod.yaml

删除pod:
在这里插入图片描述

P45 、核心实战——可视化操作与pod细节

步骤:
在这里插入图片描述
没有加N的是整个集群可用的
在这里插入图片描述

#查看日志
 kubectl logs mynginx

在这里插入图片描述

# 每个Pod - k8s都会分配一个ip
kubectl get pod -owide

在这里插入图片描述

# 使用Pod的ip+pod里面运行容器的端口
curl 192.168.169.132

在这里插入图片描述

#进入到pod中去
kubectl exec -it mynginx -- /bin/bash

在这里插入图片描述
对nginx的html界面操作,然后再访问:
在这里插入图片描述
在可视化界面操作直接点击即可:
在这里插入图片描述
重点:在k8s里的任意一个节点都可以访问pod(集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod)
在这里插入图片描述

P46 、核心实战——多容器pod细节

一个pod多个容器的yaml文档的内容:

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat:8.5.68
    name: tomcat

接着就是创建pod(也可以看看可视化界面):
在这里插入图片描述
访问这个pod:
在这里插入图片描述
访问这个pod不写端口就是默认80端口,Tomcat是8080端口;
在这里插入图片描述
pod里的容器访问其他容器只要127.0.0.1即可,他们是共享网络空间和存储的;接下来通过可视化界面进入pod其中的一个容器来请求其他的容器,如图下:
在这里插入图片描述
另一个知识点:一个pod里面是否可以启动两个nginx(容器)?
发现是失败的!
在这里插入图片描述

#查看一下原因
kubectl describe pod myapp-2

在这里插入图片描述
在可视化页面查看日志:
在这里插入图片描述

在这里插入图片描述
注意:pod里面应用一定不能占用相同的端口。

P47 、核心实战——使用Deployment部署应用

deployment作用:控制Pod,使Pod拥有多副本,自愈,扩缩容等能力

删除原先的pod:

                #删除两个pod     在default名称空间中
kubectl delete pod myapp mynginx -n default
# 比较下面两个命令有何不同效果?
kubectl run mynginx --image=nginx

#使用了deployment
kubectl create deployment mytomcat --image=tomcat:8.5.68
# 自愈能力(如果我们使用deployment部署的应用,delete pod了或者宕机了,k8s还会再拉起一个。)

在这里插入图片描述

P48 、核心实战——Deployment多副本能力

像我们上面使用kubectl delete pod mytomcat-6f5f895f4f-phrqw它删除不掉deployment部署的;

所以,怎么删?先获取deployment部署,然后直接删除,命令如下:

kubectl get deploy#获取deployment
kubectl delete deploy mytomcat#删除deployment

在这里插入图片描述
多副本:

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

在linux里操作,或者可视化页面操作都可以。

P49 、核心实战——Deployment扩缩容能力

在这里插入图片描述
扩缩容:

kubectl scale --replicas=5 deployment/my-dep#扩缩容都是用这个命令,只要修改replicas参数
kubectl edit deployment my-dep#修改文件
#修改 replicas

可以在可视化界面里面做扩缩容:
在这里插入图片描述

P50 、核心实战——工作负载——Deployment自愈&故障转移能力

在这里插入图片描述
实验:
1、在主节点找到一个pod,然后在工作节点让其停止;
在这里插入图片描述
在这里插入图片描述
我们在主节点会发现,这个有自愈能力,重启了一次::
2、接下来测试一下,我们的node2的服务器宕机了:
我们把node2的机器关机:
在这里插入图片描述

kubectl get pod -w#这个命令是把pod的状态过程打印出来

在这里插入图片描述
在另一台服务器成功启动,deployment有故障转移能力:
在这里插入图片描述
重点:Deployment保障副本

P51 、核心实战——工作负载——Deployment滚动更新能力

更新机制是先把新的pod版本(v2)起来,然后是running状态后就把老的(v1)给杀了。
在这里插入图片描述

kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record#更新版本

在这里插入图片描述
这就是deployment的滚动更新能力

P52 、核心实战——工作负载——Deployment版本回退能力

#查看版本历史记录
kubectl rollout history deployment/my-dep

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

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

P52 、核心实战——工作负载——小结

更多: 除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。
有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署
https://kubernetes.io/zh/docs/concepts/workloads/controllers/

在这里插入图片描述
我们不直接部署pod,都是使用这些工作负载来控制pod的,这样就能让pod比原先的pod更强大的功能。

Logo

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

更多推荐