1、资源创建方式
● 命令行
● YAML
2、Namespace
名称空间用来隔离资源
使用命令行创建、删除
kubectl create ns hello
kubectl delete ns hello
使用配置文件创建、删除
delete ns -f 配置文件
apiVersion: v1
kind: Namespace
metadata:
name: hello
3、Pod
**运行中的一组容器,Pod是kubernetes中应用的最小单位.**是说docker容器外面还有以容器就是Pod
使用命令行来创建
kubectl run mynginx --image=nginx
# 查看default名称空间的Pod
kubectl get pod
# 描述
kubectl describe pod 你自己的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 exec -it 容器名 -- /bin/bash
使用配置文件来创建
apiVersion: v1
kind: Pod
metadata:
labels:
run: mynginx
name: mynginx
# namespace: default
spec:
containers:
- image: nginx
name: mynginx
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name: myapp
spec:
containers:
- image: nginx
name: nginx
- image: tomcat:8.5.68
name: tomcat
使用图形界面来创建
创建容器点击右上角的加号+
要选择好命名空间的位置否则不能创建
我们可以再图形化界面中对创建的容器进行操作
使用命令进入容器中
kubectl exec -it mynginx -- /bin/bash
修改里面的内容
我们还可以直接再图形化界面容器点击执行可以直接进入容器内部进行修改
创建的容器我们查找到他的端口,它是可以再不同节点进行访问
使用配置文件创建一个容器中有两个镜像
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name: myapp
spec:
containers:
- image: nginx
name: nginx
- image: tomcat:8.5.68
name: tomcat
因为容器中有多个不同的镜像,所以我们再访问的时候要指定想对应的端口。
我们还可以再可视化界面进入,因为他们实在一个pod内所以他们两个访问直接使用127.0.0.1:端口号进行访问。
特别要记住我们创建的Pod容器内有多个镜像,但是这些镜像的端口一定要不相同,否则不能创建成功
删除多个镜像并指定命名空间
kubectl delete pod myapp mynginx -n default
4.Deployment
控制Pod,使Pod拥有多副本,自愈,扩缩容等能力
# 清除所有Pod,比较下面两个命令有何不同效果?
kubectl run mynginx --image=nginx
kubectl create deployment mytomcat --image=tomcat:8.5.68
# 自愈能力
开启监听 每个一秒执行一次命令
watch -n 1 kubectl get pod
删除容器 我们会发现当我们使用普通命令删除容器的时候,他会自动在给我们创建一个新的,这就是他的强大之自愈能力
kubectl delete pod mytomcat-6f5f895f4f-qlg6q
当我们真的像删除时,需要现查看deplop,在指定删除
kubectl get deploy
kubectl delete deploy mytomcat
多副本
replicas创建三个nginx他会自动给我们放在不同的节点上
kubectl create deployment my-dep --image=nginx --replicas=3
我们可以使用命令删除,也可以在图形化界面左侧De找到对应的进行删除
kubectl delete -n default deployment my-dep
使用图形化界面从表单中创建
可以使用配置文件进行创建
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=5指定容器中的数量
kubectl scale --replicas=5 deployment/my-dep
通过修改配置文件来进行扩容
kubectl edit deployment my-dep
#修改 replicas
通过可视化界面来进行扩容
自愈&故障转移
● 停机
● 删除Pod
● 容器崩溃
停止一个容器他会自动给我们再启动一次
查看deploy中的信息
kubectl get pod -owide
通过上面的搜素我们看到容器的名,选择的node1中的,来到node1节点使用docker进行搜索
docker ps|grep my-dep-5b7868d854-pk6kp
找到容器id进行停止
模拟服务宕机
停止node1服务器
他会有一个默认的时间来进行判断5分钟,五分钟后他会认为这个服务宕机
注意节点的变化,他会给我们重新再node2上面创建两个
这是k8s自带的我们监听
kubectl get pod -w
滚动更新
这样旧可以达到不停机的迭代更新
就是回滚到之前的版本中
使用yaml格式打开
kubectl get deploy my-dep -oyaml
找到containers容器版本
–record是记住这次回滚的命令
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
kubectl rollout status deployment/my-dep #查看回滚状态
再回滚的过程中,它是先创建一个新的容器等他运行好才把旧的容器删除掉。他不先直接删除
版本回退
#历史记录
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
版本回退同样是先创建容器再删除旧的容器
更多:
除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。
有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署
https://kubernetes.io/zh/docs/concepts/workloads/controllers/