K8S-pod详解
namespace 六大类型
Pod基础概念:
Pod两种使用方式:

通常把Pod分为两类:

Pod容器的分类:
Init 的容器作用
1 apiVersion: v1
2 kind: Pod
3 metadata:
4 name: myapp-pod
5 labels:
6 app: myapp
7 spec:
8 containers:
9 - name: myapp-container
10 image: busybox:1.28
11 command: ['sh', '-c', 'echo The app is running! && sleep 3600']
12 initContainers:
13 - name: init-myservice
14 image: busybox:1.28
15 command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
16 - name: init-mydb
17 image: busybox:1.28
18 command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
1 kubectl describe pod myapp-pod
2
3 kubectl logs myapp-pod -c init-myservice
4
5 vim myservice.yaml
6 apiVersion: v1
7 kind: Service
8 metadata:
9 name: myservice
10 spec:
11 ports:
12 - protocol: TCP
13 port: 80
14 targetPort: 9376
15
16 kubectl create -f myservice.yaml
17
18 kubectl get svc
19
20 kubectl get pods -n kube-system
21
22 kubectl get pods
23
24 vim mydb.yaml
25 apiVersion: v1
26 kind: Service
27 metadata:
28 name: mydb
29 spec:
30 ports:
31 - protocol: TCP
32 port: 80
33 targetPort: 9377
34
35 kubectl create -f mydb.yaml
36
37 kubectl get pods
镜像拉取策略(image PullPolicy):
1 kubectl apply -f - <<EOF
2 apiVersion: v1
3 kind: Pod
4 metadata:
5 name: private-image-test-1
6 spec:
7 containers:
8 - name: uses-private-image
9 image: $PRIVATE_IMAGE_NAME
10 imagePullPolicy: Always
11 command: [ "echo", "SUCCESS" ]
12 EOF
13
14
15 //master01 上操作
16 kubectl edit deployment/nginx-deployment
17 ......
18 template:
19 metadata:
20 creationTimestamp: null
21 labels:
22 app: nginx
23 spec:
24 containers:
25 - image: nginx:1.15.4
26 imagePullPolicy: IfNotPresent #镜像拉取策略为 IfNotPresent
27 name: nginx
28 ports:
29 - containerPort: 80
30 protocol: TCP
31 resources: {}
32 terminationMessagePath: /dev/termination-log
33 terminationMessagePolicy: File
34 dnsPolicy: ClusterFirst
35 restartPolicy: Always #Pod的重启策略为 Always,默认值
36 schedulerName: default-scheduler
37 securityContext: {}
38 terminationGracePeriodSeconds: 30
39 ......
40
41
42 //创建测试案例
43 mkdir /opt/demo
44 cd /opt/demo
45
46 vim pod1.yaml
47 apiVersion: v1
48 kind: Pod
49 metadata:
50 name: pod-test1
51 spec:
52 containers:
53 - name: nginx
54 image: nginx
55 imagePullPolicy: Always
56 command: [ "echo", "SUCCESS" ]
57
58
59 kubectl create -f pod1.yaml
60
61 kubectl get pods -o wide
62 pod-test1 0/1 CrashLoopBackOff 4 3m33s
63 //此时 Pod 的状态异常,原因是 echo 执行完进程终止,容器生命周期也就结束了
64
65 kubectl describe pod pod-test1
66 ......
67 Events:
68 Type Reason Age From Message
69 ---- ------ ---- ---- -------
70 Normal Scheduled 2m10s default-scheduler Successfully assigned default/pod-test1 to 192.168.80.11
71 Normal Pulled 46s (x4 over 119s) kubelet, 192.168.80.11 Successfully pulled image "nginx"
72 Normal Created 46s (x4 over 119s) kubelet, 192.168.80.11 Created container
73 Normal Started 46s (x4 over 119s) kubelet, 192.168.80.11 Started container
74 Warning BackOff 19s (x7 over 107s) kubelet, 192.168.80.11 Back-off restarting failed container
75 Normal Pulling 5s (x5 over 2m8s) kubelet, 192.168.80.11 pulling image "nginx"
76 //可以发现 Pod 中的容器在生命周期结束后,由于 Pod 的重启策略为 Always,容器再次重启了,并且又重新开始拉取镜像
77
78 //修改 pod1.yaml 文件
79 cd /opt/demo
80 vim pod1.yaml
81 apiVersion: v1
82 kind: Pod
83 metadata:
84 name: pod-test1
85 spec:
86 containers:
87 - name: nginx
88 image: nginx:1.14 #修改 nginx 镜像版本
89 imagePullPolicy: Always
90 #command: [ "echo", "SUCCESS" ] #删除
91
92 //删除原有的资源
93 kubectl delete -f pod1.yaml
94
95 //更新资源
96 kubectl apply -f pod1.yaml
97
98 //查看 Pod 状态
99 kubectl get pods -o wide
100 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
101 pod-test1 1/1 Running 0 33s 172.17.36.4 192.168.80.11 <none>
102
103 //在任意 node 节点上使用 curl 查看头部信息
104 curl -I http://172.17.36.4
105 HTTP/1.1 200 OK
106 Server: nginx/1.14.2
107 ......
部署 harbor 创建私有项目
1 //在 Docker harbor 节点(192.168.80.30)上操作
2 systemctl stop firewalld.service
3 systemctl disable firewalld.service
4 setenforce 0
5
6 yum install -y yum-utils device-mapper-persistent-data lvm2
7 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
8 yum install -y docker-ce
9 systemctl start docker.service
10 systemctl enable docker.service
11 docker version
12
13 //上传 docker-compose 和 harbor-offline-installer-v1.2.2.tgz 到 /opt 目录中
14 cd /opt
15 chmod +x docker-compose
16 mv docker-compose /usr/local/bin/
17
18 //部署 Harbor 服务
19 tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
20 vim /usr/local/harbor/harbor.cfg
21 --5行--修改,设置为Harbor服务器的IP地址或者域名
22 hostname = 192.168.80.30
23
24 cd /usr/local/harbor/
25 ./install.sh
26
27
28 //在 Harbor 中创建一个新项目
29 (1)浏览器访问:http://192.168.80.10 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
30 (2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
31 (3)填写项目名称为“kgc-project”,点击“确定”按钮,创建新项目
1 //在每个 node 节点配置连接私有仓库(注意每行后面的逗号要添加)
2 cat > /etc/docker/daemon.json <<EOF
3 {
4 "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
5 "insecure-registries":["192.168.80.30"]
6 }
7 EOF
8
9 systemctl daemon-reload
10 systemctl restart docker
11
12 //在每个 node 节点登录 harbor 私有仓库
13 docker login -u admin -p harbor12345 http://192.168.80.30
14
15 //在一个 node 节点下载 Tomcat 镜像进行推送
16 docker pull tomcat:8.0.52
17 docker images
18
19 docker tag tomcat:8.0.52 192.168.80.30/kgc-project/tomcat:v1
20 docker images
21
22 docker push 192.168.80.30/kgc-project/tomcat:v1
23
24
25 //查看登陆凭据
26 cat /root/.docker/config.json | base64 -w 0 #base64 -w 0:进行 base64 加密并禁止自动换行
27 ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0=
28
29
30 //创建 harbor 登录凭据资源清单,用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源
31 vim harbor-pull-secret.yaml
32 apiVersion: v1
33 kind: Secret
34 metadata:
35 name: harbor-pull-secret
36 data:
37 .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjE5NS44MCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy41IChsaW51eCkiCgl9Cn0= #复制粘贴上述查看的登陆凭据
38 type: kubernetes.io/dockerconfigjson
39
40
41 //创建 secret 资源
42 kubectl create -f harbor-pull-secret.yaml
43
44 //查看 secret 资源
45 kubectl get secret
46
47 //创建资源从 harbor 中下载镜像
48 cd /opt/demo
49 vim tomcat-deployment.yaml
50 apiVersion: apps/v1
51 kind: Deployment
52 metadata:
53 name: my-tomcat
54 spec:
55 replicas: 2
56 selector:
57 matchLabels:
58 app: my-tomcat
59 template:
60 metadata:
61 labels:
62 app: my-tomcat
63 spec:
64 imagePullSecrets: #添加 K8S 访问 Harbor 私服拉取镜像所需要的 secret 资源选项
65 - name: harbor-pull-secret #指定 secret 资源名称
66 containers:
67 - name: my-tomcat
68 image: 192.168.80.30/kgc-project/tomcat:v1 #指定 harbor 中的镜像名
69 ports:
70 - containerPort: 80
71 ---
72 apiVersion: v1
73 kind: Service
74 metadata:
75 name: my-tomcat
76 spec:
77 type: NodePort
78 ports:
79 - port: 8080
80 targetPort: 8080
81 nodePort: 31111
82 selector:
83 app: my-tomcat
84
85
86 //删除之前在 node 节点下载的 Tomcat 镜像
87 docker rmi tomcat:8.0.52
88 docker rmi 192.168.80.30/kgc-project/tomcat:v1
89 docker images
90
91
92 //创建资源
93 kubectl create -f tomcat-deployment.yaml
94
95 kubectl get pods
96 NAME READY STATUS RESTARTS AGE
97 my-tomcat-d55b94fd-29qk2 1/1 Running 0
98 my-tomcat-d55b94fd-9j42r 1/1 Running 0
99
100 //查看 Pod 的描述信息,可以发现镜像时从 harbor 下载的
101 kubectl describe pod my-tomcat-d55b94fd-29qk2
102
103 //刷新 harbor 页面,可以看到镜像的下载次数增加了
总结:
K8S-pod详解的更多相关文章
- services资源+pod详解
services资源+pod详解 一.Service 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化 Pod IP 仅仅是集群内可见的虚 ...
- Kubernetes Pod详解
目录 基本概念 pod资源配额 容器的健康检查 静态pod 基本概念 Pod是kubernetes集群中最基本的资源对象.每个pod由一个或多个业务容器和一个根容器(Pause容器)组成.Kubern ...
- kubernetes创建资源对象yaml文件例子--pod详解
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...
- kubernetes 实践四:Pod详解
本篇是关于k8s的Pod,主要包括Pod和容器的使用.Pod的控制和调度管理.应用配置管理等内容. Pod的定义 Pod是k8s的核心概念一直,就名字一样,是k8s中一个逻辑概念.Pod是docekr ...
- pod详解
什么是pod? 官方说明: Pod是Kubernetes应用程序的最基本执行单元-是你创建或部署Kubernetes对象模型中的最小和最简单的单元. Pod表示在集群上运行的进程.Pod封装了应用程序 ...
- k8s 配置文件 详解
apiVersion: v1 # [必须]版本号kind: Pod # [必选]Podmetadata: # [必选-Object]元数据 name: String # [必选] Pod的名称 nam ...
- K8s架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...
- pod 详解
静态pod是由kubelet进行管理的仅存在于特定的node上的pod. pod容器共享volume同一个pod中的多个容器能够共享pod级别的存储卷volume pod的配置管理 应用配置管理方案 ...
- k8s 使用详解
转自:https://www.cnblogs.com/gaoyuechen/p/8685771.html
- Kubernetes K8S之通过yaml文件创建Pod与Pod常用字段详解
YAML语法规范:在kubernetes k8s中如何通过yaml文件创建pod,以及pod常用字段详解 YAML 语法规范 K8S 里所有的资源或者配置都可以用 yaml 或 Json 定义.YAM ...
随机推荐
- find_package()的使用
find_package()命令是用来查找依赖包的,理想情况下,一句find_package()把一整个依赖包的头文件包含路径.库路径.库名字.版本号等情况都获取到,后续只管用就好了.但实际中往往CM ...
- 【译】.NET 7 中的性能改进(三)
原文 | Stephen Toub 翻译 | 郑子铭 PGO 我在我的 .NET 6 性能改进一文中写了关于配置文件引导优化 (profile-guided optimization) (PGO) 的 ...
- RocketMQ - 生产者最佳实践总结
相对消费者而言,生产者的使用更加简单,一般关注消息类型.消息发送方法和发送参数,即可正常使用RocketMQ发送消息 常用消息类型 消息类型 优点 缺 点 备注 普通消息(并发消息) 性能最好.单机T ...
- Java Agent场景性能测试分析优化经验分享
摘要:本文将以Sermant的SpringBoot 注册插件的性能测试及优化过程为例,分享在Java Agent场景如何进行更好的性能测试优化及在Java Agent下需要着重注意的性能陷阱. 作者: ...
- [转载]python跨文件使用全局变量的实现
python跨文件使用全局变量的实现 更新时间:2022-10-25 14:46:38发布时间:602天前 朗读 Python 定义了全局变量的特性,使用global 关键字修饰 1 global k ...
- ubuntu20.04虚拟机无法自动获取IP地址
具体操作 # ens33 为网卡名称 sudo dhclient ens33
- pycharm软件基本使用python语法的注释变量的使用常量的使用变量的命名规范python的优化垃圾回收机制数据类型
pycharm软件基本使用 1.pycharm基本的使用方法:1.点击file找到settings(设置)打开Appearance&Behavior点击Appearance看theme这个就是 ...
- 找出一组数中出现次数最多的数(csp201312-1)
问题描述:找出一组数字出现次数最多的数,如果有多个这样的数,输出其中最小的一个. 算法:sort排序,遍历数组,每遍历一个数,查出它已经出现的次数. 代码: #include<bits/stdc ...
- 工作日统计工具(python)
一.前言 最近在整理之前写过的工具,发现这个虽然写得很简单,但是现在回头看看还挺有趣,就放出来LOL 记得应该是因为当初写立项书的时候,总是得算10个工作日之后是几号,或者到几号结束还剩下多少个工作日 ...
- [PHP]流程控制的替代语法:endif/endwhile/endfor使用介绍
我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如: 代码如下: <?php if(empty($GET_['a'])): ?> <font color ...