一、编辑yaml文件###

  1. [root@K8s-Master Tools]# cat hello-world-pod.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: hello-world
  6. spec:
  7. nodeSelector:
  8. type: node1
  9. containers:
  10. - name: hello
  11. image: "ubuntu:14.04"
  12. command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

二、创建并查看运行状态###

  1. [root@K8s-Master Tools]# kubectl create -f hello-world-pod.yaml
  2. pod/hello-world created
  3. [root@K8s-Master Tools]# kubectl get pod hello-world
  4. NAME READY STATUS RESTARTS AGE
  5. hello-world 1/1 Running 0 8m2s
  6. [root@K8s-Master Tools]# kubectl get pods --all-namespaces
  7. NAMESPACE NAME READY STATUS RESTARTS AGE
  8. default hello-world 1/1 Running 0 3s
  9. kube-system coredns-bccdc95cf-plst5 1/1 Running 13 36d
  10. kube-system coredns-bccdc95cf-vkqzr 1/1 Running 13 36d
  11. kube-system etcd-k8s-master 1/1 Running 15 36d
  12. kube-system kube-apiserver-k8s-master 1/1 Running 15 36d
  13. kube-system kube-controller-manager-k8s-master 1/1 Running 15 36d
  14. kube-system kube-flannel-ds-amd64-4g6qc 1/1 Running 6 36d
  15. kube-system kube-flannel-ds-amd64-ccj8v 1/1 Running 14 36d
  16. kube-system kube-flannel-ds-amd64-fhrfj 1/1 Running 8 36d
  17. kube-system kube-proxy-jp6mp 1/1 Running 13 36d
  18. kube-system kube-proxy-rkbcx 1/1 Running 6 36d
  19. kube-system kube-proxy-rmkqm 1/1 Running 8 36d
  20. kube-system kube-scheduler-k8s-master 1/1 Running 15 36d
  21. kube-system kubernetes-dashboard-6db4897b74-lqfl6 1/1 Running 1 24h



注意点:将pod分配到指定的节点

将pod调度到指定节点有2种方式:

方式一:强制约束Pod调度到指定Node节点上

  1. Pod.spec.nodeName

方式二:通过label-selector机制选择节点

  1. Pod.spec.nodeSelector





以下使用第二种方式实现pod调度到指定节点。

①为Node添加label

  1. kubectl label node k8s-node1 type=node1
  2. kubectl get nodes --show-labels
  1. [root@K8s-Master Tools]# kubectl get nodes --show-labels
  2. NAME STATUS ROLES AGE VERSION LABELS
  3. k8s-master Ready master 37d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=,type=master
  4. k8s-node1 Ready <none> 37d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,type=node1
  5. k8s-node2 Ready <none> 37d v1.15.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,type=node2

②将pod分配到带有指定label的node

Pod操作:

删除Pod

  1. kubectl delete pod hello

更新Pod

  1. kubctl replace hello-world.yaml

三、可能遇到的问题###

Error:Back-off restarting failed container

  1. [root@K8s-Master Tools]# kubectl describe pod hello-world
  2. Name: hello-world
  3. Namespace: default
  4. Priority: 0
  5. Node: k8s-node1/10.0.2.15
  6. Start Time: Fri, 18 Oct 2019 17:16:13 +1100
  7. Labels: <none>
  8. Annotations: <none>
  9. Status: Running
  10. IP: 192.168.1.15
  11. Containers:
  12. hello:
  13. Container ID: docker://ae85d78070dc02a19fed619c6270732cd98bfc1d824262b2935bc2362d7b70e5
  14. Image: ubuntu:14.04
  15. Image ID: docker-pullable://ubuntu@sha256:2f7c79927b346e436cc14c92bd4e5bd778c3bd7037f35bc639ac1589a7acfa90
  16. Port: <none>
  17. Host Port: <none>
  18. Command:
  19. /bin/echo
  20. Hello
  21. world
  22. State: Waiting
  23. Reason: CrashLoopBackOff
  24. Last State: Terminated
  25. Reason: Completed
  26. Exit Code: 0
  27. Started: Fri, 18 Oct 2019 17:18:10 +1100
  28. Finished: Fri, 18 Oct 2019 17:18:10 +1100
  29. Ready: False
  30. Restart Count: 4
  31. Environment: <none>
  32. Mounts:
  33. /var/run/secrets/kubernetes.io/serviceaccount from default-token-hctt8 (ro)
  34. Conditions:
  35. Type Status
  36. Initialized True
  37. Ready False
  38. ContainersReady False
  39. PodScheduled True
  40. Volumes:
  41. default-token-hctt8:
  42. Type: Secret (a volume populated by a Secret)
  43. SecretName: default-token-hctt8
  44. Optional: false
  45. QoS Class: BestEffort
  46. Node-Selectors: type=node1
  47. Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
  48. node.kubernetes.io/unreachable:NoExecute for 300s
  49. Events:
  50. Type Reason Age From Message
  51. ---- ------ ---- ---- -------
  52. Normal Scheduled 2m31s default-scheduler Successfully assigned default/hello-world to k8s-node1
  53. Normal Pulling 2m30s kubelet, k8s-node1 Pulling image "ubuntu:14.04"
  54. Normal Pulled 2m10s kubelet, k8s-node1 Successfully pulled image "ubuntu:14.04"
  55. Normal Created 34s (x5 over 2m10s) kubelet, k8s-node1 Created container hello
  56. Normal Started 34s (x5 over 2m9s) kubelet, k8s-node1 Started container hello
  57. Normal Pulled 34s (x4 over 2m8s) kubelet, k8s-node1 Container image "ubuntu:14.04" already present on machine
  58. Warning BackOff 34s (x9 over 2m7s) kubelet, k8s-node1 Back-off restarting failed container

解决方法:

As per Describe Pod command listing, your Container inside the Pod has been already completed with exit code 0, which states about successful completion without any errors/problems, but the life cycle for the Pod was very short. To keep Pod running continuously you must specify a task that will never finish.

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: ubuntu
  5. spec:
  6. containers:
  7. - name: ubuntu
  8. image: ubuntu
  9. command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]

参考链接:

将pod分配到指定的节点.

Back-off restarting failed container.

【Kubernetes】创建Pod并分配到指定节点的更多相关文章

  1. [置顶] kubernetes创建资源yaml文件例子--pod

    kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...

  2. pod(一):Kubernetes(k8s)创建pod的两种方式

    目录 一.系统环境 二.前言 三.pod 四.创建pod 4.1 环境介绍 4.2 使用命令行的方式创建pod 4.2.1 创建最简单的pod 4.2.2 创建pod,指定镜像下载策略 4.2.3 创 ...

  3. k8s创建pod流程

    kubernetes 创建Pod 的 工作流: step.1 kubectl 向 k8s api server 发起一个create pod 请求(即我们使用Kubectl敲一个create pod命 ...

  4. K8s创建pod yaml文件详解

    kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...

  5. k8s创建pod和service的过程

    一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...

  6. Kubernetes集群向指定节点上创建容器

    如果需要限制Pod到指定的Node上运行,则可以给Node打标签并给Pod配置NodeSelector. 给节点添加标签 首先查看节点信息 [root@k8s-master ~]# kubectl g ...

  7. Docker Kubernetes 创建管理 Pod

    Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  8. kubernetes创建资源对象yaml文件例子--pod详解

    apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...

  9. Kubernetes对Pod调度指定Node以及Node的Taint 和 Toleration

    由于博客园不支持markdown,推荐以下url阅读: 原创url:https://blog.csdn.net/weixin_42495873/article/details/103364868 ## ...

随机推荐

  1. time 与 data time

    >>> import datetime>>> datetime.datetime.now()datetime.datetime(2018, 5, 30, 15, 3 ...

  2. 网络请求之jsonp封装

    首先介绍下jsonp原理 浏览器因为同源策略的限制,在不同源的服务器通过我们传统axios是不能直接用来请求数据的(忽略代理),而src标签则不受同源策略的影响,所以我们需要动态的创建带有src的标签 ...

  3. 【C++】STL :栈

    c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...

  4. 利用idea构建hibernate

    1.创建项目 若勾选Use library,则点击右侧的Create,使用本地已下载的Hibernate 5.2.13框架(必须导入hibernate-release-5.2.13.Final\lib ...

  5. part12.5-定时器去抖

  6. 现代IM系统中的消息系统架构 - 模型篇

    前言 在架构篇中我们介绍了现代IM消息系统的架构,介绍了Timeline的抽象模型以及基于Timeline模型构建的一个支持『消息漫游』.『多端同步』和『消息检索』多种高级功能的消息系统的典型架构.架 ...

  7. js获取本周日期

    JS获取到本周的日期 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  8. laravel 定时任务通过队列发送邮件

    https://www.jianshu.com/p/f6b94596098e 关于laravel发送邮件,请先参考我的另一片文章:laravel sendcloud发送邮件,再继续往下看. 1.用da ...

  9. phpstorm 左边的文件列表没用了 怎么弄出来

      ALT+1ALT+数字键,是各种工具栏的显示与隐藏快捷键,你可以挨个试一下.

  10. ubuntu netstat 查看端口占用情况

    netstat 用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships ...