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 ...
随机推荐
- P24_wxss - wxss与css的关系
WXSS 模板样式 什么是 WXSS WXSS (WeiXin Style Sheets)是一套样式语言,用于美化 WXML 的组件样式,类似于网页开发中的 CSS. WXSS 和 CSS 的关系 W ...
- CMakeList汇总
cmake_minimum_required(VERSION 2.8.3) PROJECT (HELLO) #工程名 set(CMAKE_BUILD_TYPE "Debug")se ...
- sort()排序以及多个属性数组对象排序(按条件排序)
原生排序 let arr = [5,2,1,4,9,8] for(let i = 0 ; i < arr.length ; i ++) { for(let j = 0 ; j < arr. ...
- [学习笔记]SQL server完全备份指南
方式一,使用SQL Server Management Studio 准备工作 连接目标数据库服务器 在目标数据库上右键->属性,将数据库的恢复模式设置为"简单",兼容级别设 ...
- echarts在移动端上tooltip弹框点击空白不能关闭的问题解决方案
1.首先新建一个mixin.js文件 export const mixinAutoHideTooltip = { mounted() { this.mAutoHideTooltip(this.$el) ...
- 【USACO 2021 US Open, Gold】Permutation
\(\text{Solution}\) 发现每个时刻的状态一定是所有点在一个最外围三角形的内部 设 \(f_{i,j,k,p}\) 表示排列填到第 \(p\) 位,此时图形最外围的三角形是以编号为 \ ...
- 跳板攻击之:NPS代理转发
跳板攻击之:NPS代理转发 目录 跳板攻击之:NPS代理转发 1 NPS介绍 2 NPS特点 3 实验环境 3.1 实验准备 3.2 实验拓扑 3.3 NPS配置 3.3.1 conf/nps.con ...
- 免杀之:Mimikatz 免杀过杀软,思路学习
免杀之:Mimikatz 免杀过杀软 目录 免杀之:Mimikatz 免杀过杀软 1 环境准备 2 处理过程 2.1 生成原始的Mimikatz程序 2.2 定位到代码或字符串上特征绕过 2.3 定位 ...
- 理论+实战,详解Sharding Sphere-jdbc
摘要:Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品:ShardingSphere-Proxy和ShardingSphere-JDBC. 本文分享自华为云社区 ...
- XView 架构升级之路
作者:京东零售 胡本奎 一 背景 1 是什么 XView是一个透明的塑料袋(容器),基于通用的webview框架改造而来,通常用于大促弹窗等营销场景,展现形式如下图: 2 痛点 在实际的开发使用中XV ...