二、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 ~]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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数据库查询与断言