命令式对象配置
(通过命令配置和配置文件去操作kubernetes)
kubectl create/path -f nginx.yaml
(把参数集成在配置文件中)
(就是使用命令配合文件一起操作kubernetes资源)
1.创建一个nginxpod.yaml文件写入以下内容
apiVersion: v1 kind: Namespace metadata: name: xiaole --- apiVersion: v1 kind: Pod metadata: name: nginxpod namespace: xiaole spec: containers: - name: nginx-containers image: nginx #文件详解 apiVersion: v1 #api版本 kind: Namespace #操作的资源 metadata: #资源元数据 name: xiaole #要创建的namespace 名字 #对应的命令 kubectl create namespace xiaole --- apiVersion: v1 kind: Pod metadata: name: nginxpod #定义pod的名字 namespace: xiaole #pod要绑定的namespace spec: #资源规格 containers: - name: nginx-containers #pod中容器的名字 image: nginx #创建pod使用的镜像
2.执行命令create命令创建资源
#命令: kubectl create -f nginxpod.yaml [root@master ~]# kubectl create -f nginxpod.yaml namespace/xiaole created pod/nginxpod created #查看创建的pod [root@master ~]# kubectl get pod -n xiaole -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginxpod 1/1 Running 0 21m 10.244.1.10 node <none> <none>
3.执行delete命令删除资源
#命令: kubectl delete -f nginxpod.yaml [root@master ~]# kubectl delete -f nginxpod.yaml namespace "xiaole" deleted pod "nginxpod" deleted #删除yaml文件中的配置资源
声明式对象配置
(通过apply命令和配置文件去操作kubernetes资源)
kubectl apply -f nginx-pod.yaml
(用于创建和更新资源)
1.创建一个nginxpod.yaml文件写入以下内容
apiVersion: v1 kind: Namespace metadata: name: xiaole --- apiVersion: v1 kind: Pod metadata: name: nginxpod namespace: xiaole spec: containers: - name: nginx-containers image: nginx #文件详解 apiVersion: v1 #api版本 kind: Namespace #操作的资源 metadata: #资源元数据 name: xiaole #要创建的namespace 名字 #对应的命令 kubectl create namespace xiaole --- apiVersion: v1 kind: Pod metadata: name: nginxpod #定义pod的名字 namespace: xiaole #pod要绑定的namespace spec: #资源规格 containers: - name: nginx-containers #pod中容器的名字 image: nginx:1.17.2 #创建pod使用的镜像
2.执行命令
#命令:kubectl get pod -n xiaole [root@master ~]# kubectl apply -f nginxpod.yaml namespace/xiaole created pod/nginxpod created #再次执行把nginx的1.17.2版本改成1.17.1 [root@master ~]# kubectl apply -f nginxpod.yaml namespace/xiaole unchanged pod/nginxpod configured #如果第一次执行没有配置文件中的资源会先去创建资源 如果已经有配置文件中的资源再次执行就会更新资源 #输入资源的详细信息 [root@master ~]# kubectl describe pod nginxpod -n xiaole Name: nginxpod Namespace: xiaole Priority: 0 Node: node/192.168.30.135 Start Time: Sun, 13 Nov 2022 20:54:35 +0800 Labels: <none> Annotations: Status: Running IP: 10.244.1.12 IPs: IP: 10.244.1.12 Containers: nginx-containers: Container ID: docker://a14e7de191d2363237b398e284575da1d299677a45b2dadb205086a328eb0c46 Image: nginx:1.17.1 Image ID: dockerpullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a96 7c03dbb Port: <none> Host Port: <none> State: Running Started: Sun, 13 Nov 2022 20:55:11 +0800 Last State: Terminated Reason: Completed Exit Code: 0 Started: Sun, 13 Nov 2022 20:55:06 +0800 Finished: Sun, 13 Nov 2022 20:55:06 +0800 Ready: True Restart Count: 1 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-mb2zn (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-mb2zn: Type: Secret (a volume populated by a Secret) SecretName: default-token-mb2zn Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 111s default-scheduler Successfully assigned xiaole/nginxpod to node Normal Pulling 110s kubelet, node Pulling image "nginx:1.17.2" Normal Pulled 81s kubelet, node Successfully pulled image "nginx:1.17.2" Normal Killing 80s kubelet, node Container nginxcontainers definition changed, will be restarted Normal Pulling 80s kubelet, node Pulling image "nginx:1.17.1" Normal Created 75s (x2 over 80s) kubelet, node Created container nginx-containers Normal Started 75s (x2 over 80s) kubelet, node Started container nginx-containers Normal Pulled 75s kubelet, node Successfully pulled image "nginx:1.17.1" #看输出的日志可以发现第一次运行的1.17.2的nginx版本 更新一下配置变成1.17.1版本的nginx 总结: 声明式对象配置就是在yaml文件中描述一个资源的最终状态 使用apply操作、 如果资源不存在,就创建资源 相当于命令 kubectl create 如果资源已经存在,就更新资源 相当于 kubectl patchs
Namespace
(命名空间)
用来对资源进行隔离
默认的情况下kubernetes中的pod都是可以相互访问的如果不想让其中的两个pod相互访问这个时候我
们就可以使用Namespace 将两个资源进行隔离 把他们分到不同的namespace
可以通过kubernetes的授权机制 把不同的namespace交给不同的用户进行管理 还能结合kubernetes的
资源配额机制 限定不同用户的占用资源例如CPU内存等
#在kubernetes集群启动后 系统会默认创建一些 namespace [root@master ~]# kubectl get namespace NAME STATUS AGE default Active 10d #所有为指定Namespace的对象都会分配到default中 所有 pod都会在一个Namespace中 如果指定了就会在你指定的Namespace中 如果未指定都会在default中 Active 9d kube-node-lease Active 10d #集群节点之间 的心跳维护 v1.13引入的 用来 kube-public Active 10d #此命名空间下面的资源可以被所有人访问 包括未认证用户 kube-system Active 10d #所有kubernetes系统创建的命名空间都处于这个命名空间 #查看kube-system命名空间下的pod [root@master ~]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-66bff467f8-q6q99 1/1 Running 5 10d coredns-66bff467f8-tx5w8 1/1 Running 5 10d etcd-master 1/1 Running 5 10d kube-apiserver-master 1/1 Running 5 10d kube-controller-manager-master 1/1 Running 5 10d kube-proxy-2fn45 1/1 Running 5 10d kube-proxy-6t9jt 1/1 Running 5 9d kube-proxy-cxjhh 1/1 Running 5 9d kube-scheduler-master 1/1 Running 5 10d #Namespace的基本操作 #查看所有Namespace [root@master ~]# kubectl get namespace NAME STATUS AGE default Active 10d kube-flannel Active 9d kube-node-lease Active 10d kube-public Active 10d kube-system Active 10d #查看其中的一个Namespace [root@master ~]# kubectl get namespace default NAME STATUS AGE default Active 10d #NAME Namespace名字 #STATUS Namespace现在的状态 STATUS有两种状态 Actice是正在运行 Terminating是正在删除命 名空间 #AGE Namespace的存活时间 #描述Namespace的详细信息 root@master ~]# kubectl get namespace default NAME STATUS AGE default Active 10d [root@master ~]# kubectl describe namespace default Name: default #名字 Labels: <none> #标签 Annotations: <none> Status: Active #状态 No resource quota. #对Namespace的资源限制 No LimitRange resource. #对Namespace中的每个组件做的资源限制 #创建Namespace [root@master ~]# kubectl create namespace xiaole namespace/xiaole created #删除Namespace [root@master ~]# kubectl delete namespace xiaole namespace "xiaole" deleted #命令式对象配置使用方法 [root@master ~]# cat xiaole.yaml apiVersion: v1 kind: Namespace metadata: name: xiaole #创建Namespace [root@master ~]# kubectl create -f xiaole.yaml namespace/xiaole created #查看Namespace [root@master ~]# kubectl get -f xiaole.yaml NAME STATUS AGE xiaole Active 72s #删除Namespace [root@master ~]# kubectl delete -f xiaole.yaml namespace "xiaole" deleted
Pod
Pod是kubernetes集群中最小的管理单元,程序要运行必须要跑在容器里面,而容器必须在Pod里面
Pod可以认为是对容器的封装 一个Pod中可以有一个或多个容器我们可以通过对Pod的操作来管理容器
kubernetes在启动的时候集群中的组件也是以Pod方式运行的可以通过下面命令查看:
[root@master ~]# kubectl get pod -n kube-system NAME READY STATUS RESTARTS AGE coredns-66bff467f8-q6q99 1/1 Running 5 10d coredns-66bff467f8-tx5w8 1/1 Running 5 10d etcd-master 1/1 Running 5 10d kube-apiserver-master 1/1 Running 5 10d kube-controller-manager-master 1/1 Running 5 10d kube-proxy-2fn45 1/1 Running 5 10d kube-proxy-6t9jt 1/1 Running 5 9d kube-proxy-cxjhh 1/1 Running 5 9d kube-scheduler-master 1/1 Running 5 10d #创建Pod #kubernetes没有提供Pod的运行命令 都是通过Pod控制器来实现控制的 #命令格式:kubectl run (pod控制器) [参数] #--image 指定pod镜像 #--port 指定端口 #--namespace 指定命名空间 #运行前我们需要先创建指定的命名空间 [root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace nginx-ns pod/nginx created #详细查看pod [root@master ~]# kubectl get -n nginx-ns pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 3m39s 10.244.1.16 node <none> <none> #-o wide 更多的 额外的 #NAME Pod的名称 #READY #当前Pod里面有几个容器 #STATUS 状态 #RESTARTS 重启次数(在pod容器运行的过程中它会重启这里会告诉你重启多少次) #AGE 运行时间 #IP Pod的ip #NODE 运行在哪个节点上面 #查看pod更详细的信息 nginx 1/1 Running 0 8m33s [root@master ~]# kubectl describe pod nginx -n nginx-ns Name: nginx #名称 Namespace: nginx-ns #运行在哪个命名空间 Priority: 0 Node: node/192.168.30.135 #运行在哪个节点 Start Time: Sat, 19 Nov 2022 10:46:41 +0800 #启动时间 Labels: run=nginx #标签 Annotations: <none> #注解 Status: Running #状态 IP: 10.244.1.16 #IP地址 IPs: IP: 10.244.1.16 Containers: #关于容器的信息 nginx: Container ID: docker://8dacf9d27b3ca8fc6765f69e9a974c21a1c19e357c3124a91ba9f68e5e7df9ed #容器的 id Image: nginx:1.17.1 #运行的镜像 Image ID: dockerpullable://nginx@sha256:b4b9b3eee194703fc2fa8afa5b7510c77ae70cfba567af1376a573a96 7c03dbb #镜像id Port: 80/TCP #端口 Host Port: 0/TCP#主机端口 State: Running#状态 Started: Sat, 19 Nov 2022 10:46:42 +0800 #启动时间 Ready: True#是否准备就绪 Restart Count: 0 #重启次数 Environment: <none> #环境变量 Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-kqwvc (ro) #挂载点 Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-kqwvc: Type: Secret (a volume populated by a Secret) SecretName: default-token-kqwvc Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: #下面这些比较重要 pod的运行事件 可以用来进行排错 Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 8m45s default-scheduler Successfully assigned nginxns/nginx to node Normal Pulled 8m44s kubelet, node Container image "nginx:1.17.1" already present on machine Normal Created 8m44s kubelet, node Created container nginx Normal Started 8m44s kubelet, node Started container nginx