kubernetes之资源清单

本文详细介绍了使用Kubernetes进行资源管理的过程,包括部署、删除应用,资源清单编写,API版本查询,Pod创建与删除,多容器Pod配置,端口映射,资源限制设定,节点选择及网络配置等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes

一、资源清单

  1. 清除deployment
[kubeadm@server2 ~]$ kubectl delete deployments.apps myapp
deployment.apps "myapp" deleted

[kubeadm@server2 ~]$ kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
test   1/1     Running   3          68m
  1. 自动缩进
[kubeadm@server2 ~]$ cat .vimrc 
autocmd filetype yaml setlocal ai ts=2 sw=2 et
  1. 编写资源清单
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
[kubeadm@server2 ~]$ mkdir manifest

[kubeadm@server2 ~]$ cd manifest/

列出api可用的版本

[kubeadm@server2 manifest]$ kubectl api-versions 
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1

查看标签

[kubeadm@server2 manifest]$ kubectl get pod --show-labels
NAME   READY   STATUS    RESTARTS   AGE   LABELS
test   1/1     Running   3          78m   run=test

查看编写pod需要用到的信息

[kubeadm@server2 manifest]$ kubectl explain pod
KIND:     Pod
VERSION:  v1

DESCRIPTION:
     Pod is a collection of containers that can run on a host. This resource is
     created by clients and scheduled onto hosts.

FIELDS:
   apiVersion	<string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

   kind	<string>
     Kind is a string value representing the REST resource this object
     represents. Servers may infer this from the endpoint the client submits
     requests to. Cannot be updated. In CamelCase. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

   metadata	<Object>
     Standard object's metadata. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

   spec	<Object>
     Specification of the desired behavior of the pod. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

   status	<Object>
     Most recently observed status of the pod. This data may not be up to date.
     Populated by the system. Read-only. More info:
     https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status

查看sped

[kubeadm@server2 manifest]$ kubectl explain pod.spec

清单

[kubeadm@server2 manifest]$ pwd
/home/kubeadm/manifest
[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent

创建

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

[kubeadm@server2 manifest]$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          5s
test    1/1     Running   3          90m

删除

[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml 
pod "myapp" deleted

[kubeadm@server2 manifest]$ kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
test   1/1     Running   3          96m
  1. 再一个pod中创建两个容器
[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent
    - name: busyboxplus
      image: busyboxplus
      imagePullPolicy: IfNotPresent
      tty: true

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

两个容器

[kubeadm@server2 manifest]$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
myapp   2/2     Running   0          8s
test    1/1     Running   3          106m

[kubeadm@server2 manifest]$ kubectl describe pod myapp
Name:         myapp
Namespace:    default
Priority:     0
Node:         server3/172.25.60.3
Start Time:   Sat, 18 Apr 2020 11:46:11 +0800
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.244.1.12
IPs:
  IP:  10.244.1.12
Containers:
  myapp:
    Container ID:   docker://cf7429b6983c27aea296a06ea02583ee30699cf02546bc6ee50b38dea38a41ad
    Image:          myapp:v1
    Image ID:       docker-pullable://myapp@sha256:9eeca44ba2d410e54fccc54cbe9c021802aa8b9836a0bcf3d3229354e4c8870e
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 18 Apr 2020 11:46:14 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
  busyboxplus:
    Container ID:   docker://471b69a9325aaeb3cd18855673d7b408f63264bcc9cf30e42ecb5133369ddc73
    Image:          busyboxplus
    Image ID:       docker-pullable://busyboxplus@sha256:9d1c242c1fd588a1b8ec4461d33a9ba08071f0cc5bb2d50d4ca49e430014ab06
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 18 Apr 2020 11:46:15 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-64lq2 (ro)
  1. 连接busyboxplus容器
    出现错误:卡住了
[kubeadm@server2 manifest]$ kubectl attach -it myapp -c busyboxplus
If you don't see a command prompt, try pressing enter.
/ # 

可行,并且可以访问另一个容器

[kubeadm@server2 ~]$ kubectl exec -it myapp -c busyboxplus -- sh
/ # curl localhost
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml 
pod "myapp" deleted
  1. 指定端口映射
[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE    IP            NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          14s    10.244.1.13   server3   <none>           <none>
test    1/1     Running   3          125m   10.244.2.6    server4   <none>           <none>

[root@server3 ~]# iptables -t nat -nL |grep :80
CNI-HOSTPORT-SETMARK  tcp  --  10.244.1.13          0.0.0.0/0            tcp dpt:80
CNI-HOSTPORT-SETMARK  tcp  --  127.0.0.1            0.0.0.0/0            tcp dpt:80
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:10.244.1.13:80

[kubeadm@server2 manifest]$ curl 172.25.60.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

[kubeadm@server2 manifest]$ kubectl delete -f pod.yaml 
pod "myapp" deleted
  1. 资源限制
[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
      resources:
        limits:
          memory: 100M
        requests:
          memory: 50M

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

[kubeadm@server2 manifest]$ kubectl describe pod myapp
    Limits:
      memory:  100M
    Requests:
      memory:     50M
  1. 选择节点
[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          8m10s   10.244.2.8   server4   <none>           <none>

查看label

[kubeadm@server2 manifest]$ kubectl get node --show-labels 
NAME      STATUS   ROLES    AGE   VERSION   LABELS
server2   Ready    master   15h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server2,kubernetes.io/os=linux,node-role.kubernetes.io/master=
server3   Ready    <none>   15h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server3,kubernetes.io/os=linux
server4   Ready    <none>   15h   v1.18.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=server4,kubernetes.io/os=linux

将myapp调到server3节点

[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
      resources:
        limits:
          memory: 100M
        requests:
          memory: 50M
  nodeSelector:
    kubernetes.io/hostname: server3

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
myapp   1/1     Running   0          10s   10.244.1.14   server3   <none>           <none>
  1. 网络(会有资源争抢)
[kubeadm@server2 manifest]$ cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers: 
    - name: myapp
      image: myapp:v1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 80
      resources:
        limits:
          memory: 100M
        requests:
          memory: 50M
  nodeSelector:
    kubernetes.io/hostname: server3
  hostNetwork: true

[kubeadm@server2 manifest]$ kubectl create -f pod.yaml 
pod/myapp created

[kubeadm@server2 manifest]$ kubectl get pod -o wide
NAME    READY   STATUS              RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
myapp   0/1     ContainerCreating   0          5s    172.25.60.3   server3   <none>           <none>


[root@server3 ~]# netstat -antlp|grep :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5461/nginx: master 

[kubeadm@server2 manifest]$ curl 172.25.60.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值