您现在的位置是:首页 >技术交流 >Kubernetes----Pod,资源对象文件网站首页技术交流
Kubernetes----Pod,资源对象文件
kubectl容器管理
kubectl用于控制Kubernetes集群的命令行工具
语法格式
kubectl [command] [type] [name] [flages]
command: 子命令,如create,get,describe,delete
type: 资源类型,可以表示为单数,复数形式或缩写形式
name: 资源的名称,如果省略,则显示所有资源信息
flags:指定可选标志,或者附加的参数
管理命令(一)
子命令 | 说明 | 备注 |
---|---|---|
help | 用于查看命令及子命令的帮助信息 | |
cluster-info | 显示集群的相关配置信息 | |
version | 查看服务器及客户端的版本信息 | |
api-resources | 查看当前服务器上所有的资源对象 | |
api-versions | 查看当前服务器上所有资源对象的版本 | |
config | 管理当前节点上kubeconfig 的认证信息 |
详解Pod
pod是k8s中最小的管理元素,由一个或者多个容器组成,是一个服务的多个进程的聚合单位
同一个pod共享网络IP及权限
同一个pod共享主机名称
同一个pod共享存储设备
Pod创建过程
为什么要使用pod?
容器服务之间有相关性
启动容器的时候需要初始化或进行相关配置
pod的生命周期
pod对象从创建开始至终止的时间范围称其为生命周期
在这断时间中,pod处在多种不同的状态,并执行相关操作
创建主容器为必须操作,其他为可选操作(初始化 启动后勾子 存活性探测 就绪性探测 终止前勾子)
Pod创建过程与状态
Pod相位状态
pending 容器创建过程中,但它尚没被调用完成
running 所有容器都已经被kubelet创建完成
succeeded 所有容器都已经成功终止了,并不会被重启 (执行一次退出)
failed pod 中的所有容器中至少有一个容器退出是非0状态
Unknown 无法正常获取到pod对象的状态信息
Pod管理命令(二)
系统中的核心服务都是运行在pod中
子命令 | 说明 | 备注 |
---|---|---|
run | 创建Pod资源对象 | 一般用来创建 Pod 模板 |
get | 查看资源对象的状态信息 | 可选参数: -o 显示格式 |
describe | 查询资源对象的属性信息 | |
logs | 查看容器的报错信息 | 可选参数: -c 容器名称 |
排错三板斧99.99% 问题通过 get describe logs提示解决
# 创建 Pod
[root@master ~]# kubectl run myweb --image=myos:httpd
pod/myweb created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myweb 1/1 Running 0 26s
# 创建交互式 Pod
[root@master ~]# kubectl run mypod -it --image=myos:v2009
If you don't see a command prompt, try pressing enter.
[root@mypod /]# : 这里已经进入Pod了
# 查询 Pod 信息
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 1 (3s ago) 18s
myweb 1/1 Running 0 68m
[root@master ~]# kubectl get pods -o name
pod/mypod
pod/myweb
[root@master ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mypod 1/1 Running 1 (39s ago) 54s 10.244.1.2 node-0001
myweb 1/1 Running 0 69m 10.244.2.2 node-0002
# 查询 pod 的属性信息
[root@master ~]# kubectl describe pod myweb
Name: myweb
... ...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 18s default-scheduler Successfully assigned default/myweb to node-0002
Normal Pulling 17s kubelet Pulling image "myos:httpd"
Normal Pulled 17s kubelet Successfully pulled image "myos:httpd" in 153.394005ms
Normal Created 17s kubelet Created container linux
Normal Started 17s kubelet Started container linux
# 查询 pod 的日志信息
[root@master ~]# kubectl logs myweb
[root@master ~]#
名称空间
# 查询节点信息
[root@master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 44m
kube-node-lease Active 44m
kube-public Active 44m
kube-system Active 44m
# 查询 kube-system 名称空间下 Pod 信息
[root@master ~]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
coredns-54b6487f4d-t7f9m 1/1 Running 0 120m
coredns-54b6487f4d-v2zbg 1/1 Running 0 120m
etcd-master 1/1 Running 0 120m
kube-apiserver-master 1/1 Running 0 120m
kube-controller-manager-master 1/1 Running 0 120m
kube-flannel-ds-8x4hq 1/1 Running 0 111m
kube-flannel-ds-c5rkv 1/1 Running 0 111m
kube-flannel-ds-sk2gj 1/1 Running 0 111m
系统命名空间
default 默认的 不声明命名空间的pod都在这
kube-node-lease为高可用提供心跳检测的命名空间
kube-public公共数据,所有用户都可以读取它
kube-system系统服务对象所示用的命名空间,系统核心服务都运行在这
查看命名空间
kubectl get namespace
查看命名空间中pod信息
kubectl -n kube-system get pods
管理命令(三)
子命令 | 说明 | 备注 |
---|---|---|
exec | 在某一个容器内执行特定的命令 | 可选参数: -c 容器名称 |
cp | 在容器和宿主机之间拷贝文件或目录 | 可选参数: -c 容器名称 |
delete | 删除资源对象 | 可选参数: -f 文件名称 |
create | 创建资源对象 | 必选参数: -f 文件名称 |
apply | (创建/更新)资源对象 | 必选参数: -f 文件名称 |
# 使用资源文件创建/更新Pod
[root@master ~]# vim mypod.yaml
---
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: linux
image: myos:latest
stdin: true
tty: true
[root@master ~]# kubectl apply -f mypod.yaml
Warning: resource pods/mypod is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
The Pod "mypod" is invalid: spec.containers: Forbidden: pod updates may not add or remove containers
[root@master ~]# sed 's,mypod,pod1,' mypod.yaml |kubectl apply -f -
pod/pod1 created
# 在Pod中执行命令
[root@master ~]# kubectl exec myweb -- ls
index.html
info.php
# 在Pod中执行一个交互式命令
[root@master ~]# kubectl exec -it myweb -- bash
[root@myweb html]# : 这里已经进入Pod了
# 拷贝Pod文件到本地
[root@master ~]# mkdir -p website
[root@master ~]# kubectl cp myweb:index.html website/index.html
[root@master ~]# tree website
config
└── index.html
# 拷贝目录到Pod
[root@master ~]# kubectl cp website mypod:./
[root@master ~]# kubectl exec mypod -- tree website
website
`-- index.html
# 删除Pod
[root@master ~]# kubectl delete -f mypod.yaml
pod "mypod" deleted
[root@master ~]# kubectl delete pod1 myweb
pod "pod1" deleted
pod "myweb" deleted
Pod资源文件
使用资源文件定义Pod
最小资源文件
kind: Pod
apiVersion: v1
metadata:
name: pod-name
spec:
containers:
- name: containers-name
image: mirror-where
status: {}
k8s定义关键字key采用小驼峰 vaule采用大驼峰形式
你必须要掌握
- --- #yaml文件开始标识
- kind: Pod #资源对象类型
- apiVersion: v1 #版本
- metadata: #元数据
- name: myweb #资源对象名称
- spec: #规格
- terminationGracePeriodSeconds: 0 #宽限期
- restartPolicy: Always #容器结束后的重启策略
- containers: #容器定义
- - name: apache #容器名称
- image: myos:httpd # 创建容器的镜像
- ports: #容器端口配置
- - protocol: TCP # 协议
- containerPort: 80 # 容器服务监听的端口