二、K8S创建POD

K8S创建pod时,需要yaml文件或者json文件,其中yaml文件的格式特别重要,这里被坑了很久。缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。具体可参见一下https://blog.csdn.net/yuxiang1014/article/details/85018741?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160921964616780277852577%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=160921964616780277852577&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-85018741.nonecase&utm_term=k8s%20yaml

复制代码
[root@k8s_master k8s_pod_yml]# cat k8s_pod_nginx.yml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx20201229
spec:
  containers:
    - name: nginx
      image: 10.0.0.29:5000/nginx:latest
      ports:
        - containerPort: 80
复制代码

创建前需要保证node节点正常工作

kubectl get nodes

如果出现下发失败,可在node节点查看 journalctl -xefu kubelet查看报过

问题1:Error syncing pod, skipping: failed to “StartContainer” for “POD” with ImagePullBackOff: “Back-off pulling image “registry.access.redhat.com/rhel7/pod-infrastructure:latest””

解决办法:手动去官网下载后,上次到本地镜像仓库,然后修改node的kubelet文件,并重启kubelet服务。

pod-infrastructure这个是k8s启动pod所需的最基础镜像,所以一定要需要。

复制代码
[root@k8s_node_1 ~]# docker images 
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
10.0.0.29:5000/nginx                   latest              ae2feff98a0c        13 days ago         133 MB
busybox                                latest              219ee5171f80        3 weeks ago         1.23 MB
docker.io/w564791/pod-infrastructure   latest              f66f4bd9b894        3 years ago         206 MB
10.0.0.29:5000/pod-infrastructure      latest              f66f4bd9b894        3 years ago         206 MB
[root@k8s_node_1 ~]# cat /etc/kubernetes/kubelet
###
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.29:5000/pod-infrastructure:latest"

# Add your own!
KUBELET_ARGS=""
[root@k8s_node_1 ~]# 
复制代码

创建完成后就可以通过k8s的常用命令查看容器的信息:

复制代码
[root@k8s_master k8s_pod_yml]# kubectl get pods 
NAME            READY     STATUS    RESTARTS   AGE
nginx20201229   1/1       Running   0          10m
nginxtest       1/1       Running   1          3h
[root@k8s_master k8s_pod_yml]# kubectl describe pod nginx20201229
Name:        nginx20201229
Namespace:    default
Node:        10.0.0.30/10.0.0.30  #调度到的节点
Start Time:    Tue, 29 Dec 2020 13:32:31 +0800
Labels:        <none>    #label的作用后面慢慢学习
Status:        Running
IP:        200.1.83.3    #容器的IP地址
Controllers:    <none>    #控制器的部分后面慢慢学习
Containers:
  nginx:
    Container ID:        docker://7f358c31235c3c4b648ee699e6ceb7769b3630ed907e4d57e789f9c1eb758312  #docker容器信息
    Image:            10.0.0.29:5000/nginx:latest  #所使用的镜像
    Image ID:            docker-pullable://10.0.0.29:5000/nginx@sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71
    Port:            80/TCP  #监听端口
    State:            Running
      Started:            Tue, 29 Dec 2020 13:32:33 +0800
    Ready:            True
    Restart Count:        0  #重启次数
    Volume Mounts:        <none>  #挂载的卷,为了保证容器重启是之前的信息持久化,就需要挂载一个本地的卷给他
    Environment Variables:    <none>  #环境变量
Conditions:
  Type        Status
  Initialized     True 
  Ready     True 
  PodScheduled     True 
No volumes.
QoS Class:    BestEffort
Tolerations:    <none>
Events:    #详细事件,这个可以看到pod启动过程中,kube-scheduler调度,拉取镜像和容器创建过程。这个信息也能帮助拍错
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ ------- 11m 11m 1 {default-scheduler } Normal Scheduled Successfully assigned nginx20201229 to 10.0.0.30 11m 11m 2 {kubelet 10.0.0.30} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy. 11m 11m 1 {kubelet 10.0.0.30} spec.containers{nginx} Normal Pulling pulling image "10.0.0.29:5000/nginx:latest" 11m 11m 1 {kubelet 10.0.0.30} spec.containers{nginx} Normal Pulled Successfully pulled image "10.0.0.29:5000/nginx:latest" 11m 11m 1 {kubelet 10.0.0.30} spec.containers{nginx} Normal Created Created container with docker id 7f358c31235c; Security:[seccomp=unconfined] 11m 11m 1 {kubelet 10.0.0.30} spec.containers{nginx} Normal Started Started container with docker id 7f358c31235c [root@k8s_master k8s_pod_yml]#
复制代码

 

这里可以看到,虽然只创建了一个pod,但是在调度的节点,会有两个容器,所以pod-infrastructure这个特别重要

[root@k8s_node_1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a034b95c03f6 10.0.0.29:5000/nginx:latest "/docker-entrypoin..." 17 minutes ago Up 17 minutes k8s_nginx.49060313_nginx20201229_default_3edb8e28-4997-11eb-ba90-000c2904e4a5_41d93e4e
380c7b09006f 10.0.0.29:5000/pod-infrastructure:latest "/pod" 17 minutes ago Up 17 minutes k8s_POD.2eea01b9_nginx20201229_default_3edb8e28-4997-11eb-ba90-000c2904e4a5_8a9ba535

[root@k8s_node_1 ~]# docker images 

REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE10.0.0.29:5000/nginx                   latest              ae2feff98a0c        13 days ago         133 MBbusybox                                latest              219ee5171f80        3 weeks ago         1.23 MBdocker.io/w564791/pod-infrastructure   latest              f66f4bd9b894        3 years ago         206 MB10.0.0.29:5000/pod-infrastructure      latest              f66f4bd9b894        3 years ago         206 MB[root@k8s_node_1 ~]# cat /etc/kubernetes/kubelet#### kubernetes kubelet (minion) config
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)KUBELET_ADDRESS="--address=0.0.0.0"
# The port for the info server to serve onKUBELET_PORT="--port=10250"
# You may leave this blank to use the actual hostnameKUBELET_HOSTNAME="--hostname-override=10.0.0.30"
# location of the api-serverKUBELET_API_SERVER="--api-servers=http://10.0.0.29:8080"
# pod infrastructure containerKUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=10.0.0.29:5000/pod-infrastructure:latest"
# Add your own!KUBELET_ARGS=""[root@k8s_node_1 ~]# 

 

posted @   woshinidaye  阅读(568)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示