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 ...
随机推荐
- .NET Core项目部署到Windows系统Docker
1.新建一个ASP.NET Core Web应用(模型-视图-控制器) 2. 项目启动Docker.Docker OS选择Windows 3.系统默认的dockerfile文件如下 #See http ...
- debug补充、员工管理系统、字符编码、文件操作
一.debug补充 在当前行的代码左侧点击一下,会出现一个红点(打断点) 在代码编辑区域右键选择debug,不要在选择run 二.员工管理系统 # 创建大列表 staff_info_list = [] ...
- C# System.Threading.Timer 详解及示例
前言 定时器功能在日常开发中也是比较常用的,在 .Net 中实际上总共有五种定时器,分别是:System.Timers.Timer.System.Threading.Timer.System.Wind ...
- 有趣的python库-turtle
turtle-绘制图像用 画樱花树 import turtle as tt import random # 画樱花的躯干(60,t) def tree(branch, t): if branch &g ...
- 代码随想录算法训练营day23 | leetcode 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
LeetCode 669. 修剪二叉搜索树 分析1.0 递归遍历树时删除符合条件(不在区间中)的节点-如何遍历如何删除 如果当前节点大于范围,递归左树,反之右树 当前节点不在范围内,删除它,把它的子树 ...
- obj对象数据归类整理
两个字段根据id对应整理 <!doctype html> <html lang="en"> <head> <meta charse ...
- Linux安装PHP8 新版笔记
PHP部分 官网下载地址:https://www.php.net/downloads.php 我下载的是此时的最新稳定版8.2.3 cd /usr/localwget https://www.php. ...
- day08-MyBatis的关联映射02
MyBatis的关联映射02 3.一对多 3.1基本介绍 mybatis – MyBatis 3 | XML 映射器 多对一关系也是一个基本的映射关系,多对一,也可以理解为一对多.例如: User-- ...
- QP之QEP事件分配流程分析
*********************************1*********************************** QActive *AO_Blinky = &l_bl ...
- Linux磁盘与文件系统
Linux磁盘与文件系统 我们使用过windows,相信大家对磁盘的概念都有所了解,像c盘d盘e盘,对吧,磁盘的作用是什么呢,作为整个系统的载体,磁盘承担了对系统中所有数据和文件存储的任务,并且可以保 ...