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采用大驼峰形式 也被称为帕斯卡拼写法

例如资源对象NodePort 正确写法

        type: NodePort

        nodePort: 30001

键值对嵌套

        json数据:{"metadata":{"name":"mypod"}}

        yaml语法格式

        metadata:

              name:mypod

数组嵌套

        json数据:{"ports":[{"containerPort":"80",{"containerPort":"443"}}]}

        yaml语法格式

         ports:

         - containerPort:80

         - containerPort:443

资源对象文件策略

镜像下载策略:Always 、Never 、IfNotPresent

服务故障策略:Always 、 Never 、 OnFailure

[root@master ~]# vim mycmd.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0 #宽限时间(迅速删除)
  restartPolicy: Never     #重启策略
  containers:
  - name: linux
    image: myos:v2009
    imagePullPolicy: IfNotPresent #(先在本地然后仓库拉取镜像)
    command: ["sleep"]
    args: ["10"]

两个方法创建资源文件

kubectl apply -f mycmd.yaml 

sed 's/xx/yy/' mycmd.yaml | kubectl apply -f  -  #这个是通过替换管道给-

多容器pod

[root@master ~]# vim myweb.yaml
---
kind: Pod
apiVersion: v1
metadata:
  name: myweb
spec:
  containers:
  - name: httpd
    image: myos:httpd
    ports:
    - protocol: TCP
      containerPort: 80
  - name: nginx
    image: myos:nginx
    ports:
    - protocol: TCP
      containerPort: 80
[root@master ~]# kubectl apply -f myweb.yaml 
pod/myweb created

 kubectl cp 路径文件 pod名:目标路径 -c 容器名

kubectl  exec -it pod名 -c 容器名 -- /bin/bash

kubectl logs pod名 -c 容器名

嵌入式脚本

---
kind: Pod
apiVersion: v1
metadata:
  name: mycmd
spec:
  terminationGracePeriodSeconds: 0
  restartPolicy: Always
  containers:
  - name: linux
    image: myos:v2009
    imagePullPolicy: IfNotPresent
    command: ["/bin/bash"]
    args:
    - -c 
    - |
      while true;do
        sleep 5
        echo "hello world."
      done

你必须要掌握

  1. ---                   #yaml文件开始标识
  2. kind: Pod        #资源对象类型
  3. apiVersion: v1  #版本
  4. metadata:        #元数据
  5. name: myweb   #资源对象名称
  6. spec:                 #规格
  7. terminationGracePeriodSeconds: 0     #宽限期
  8. restartPolicy: Always      #容器结束后的重启策略
  9. containers:                 #容器定义
  10. - name: apache           #容器名称
  11. image: myos:httpd        # 创建容器的镜像
  12. ports:                             #容器端口配置
  13. - protocol: TCP            # 协议
  14. containerPort: 80          # 容器服务监听的端口

猜你喜欢

转载自blog.csdn.net/weixin_55000003/article/details/130327461