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 ...
随机推荐
- Nginx单服务器部署多个网站,域名
转载csdn: https://blog.csdn.net/yaologos/article/details/113356620 转载亿速云: https://www.yisu.com/zixun/1 ...
- Word 设置脚注和尾注
描述 脚注一般位于页面的底部,作为文档某处内容的注释.尾注一般位于文档的末尾,列出引文的出处等. 设置脚注和尾注 将光标移动到要插入脚注或尾注的地方,然后点击"引用"选项卡. 左边 ...
- 在stm32中使用printf
记录使用printf的方法 1.配置GPIO GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ...
- Mybatis-plus中通用mapper的CRUD(增、删、改、查)操作封装BaseMapper和IService(最详细)
使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及 ...
- uniapp 返回上一页事件监听
需求 点击订单页---订单详情页----点击修改地址---来到地址列表,修改地址--- 成功以后返回订单详情页,并且更新界面数据 首先在订单详情页 设置事件 监听另一界面触发事件后 就会执行并 ...
- web生命周期概览
1, 输入URL(或单击连接). 2, 生成请求并发送至服务器. 3,执行某些动作或者获取某些资源;将响应发送给客户端. 4,处理HTML,CSS和JavaScript并构建结果页面. 5,监控事件队 ...
- K8存储之ConfigMap、Secret
ConfigMap ConfigMap是一种API对象,用来将非加密数据保存到键值对中.可以用作环境变量.命令行参数或者存储卷中的配置文件. ConfigMap供容器使用的典型用法如下: 生成为容器内 ...
- 05 RDD练习:词频统计,学习课程分数
.词频统计: 1.读文本文件生成RDD lines 2.将一行一行的文本分割成单词 words flatmap() 3.全部转换为小写 lower() 4.去掉长度小于3的单词 filter() 5. ...
- conda迁移虚拟环境
Conda离线迁移虚拟环境主要是两步: 1 在原环境中打包 2 将打好的包copy到目标环境的指定位置 打包的命令很简单 conda pack -n 虚拟环境名 当试图导出base时,报错了 Cond ...
- stm32 出入栈
Start.S 一般指定栈顶指针及栈大小 1.硬件中断 有硬件入栈和软件入栈部分 硬件入栈寄存器: R0,R1,R2,R3,R12,PSR 软件入栈寄存器: r4 - r11 2.程序切换入栈 ...