k8s 重启策略、健康检查、环境变量,天呐

[root@master ~]# cat test.yml


apiVersion: v1

kind: Pod

metadata:

name: test

spec:

containers:

  • name: bi

image: busybox

imagePullPolicy: IfNotPresent

command: [“bin/sh”,“-c”,“sleep 45”]

env:

  • name: HN

valueFrom:

fieldRef:

fieldPath: metadata.name

[root@master ~]# kubectl delete -f test.yml

pod “test” deleted

[root@master ~]# kubectl apply -f test.yml

pod/test created

[root@master ~]# kubectl get pod

NAME READY STATUS RESTARTS AGE

test 1/1 Running 0 21s

[root@master ~]# kubectl exec -it test – /bin/sh

/ # echo $HN

test

第三种

[root@master ~]# cat test.yml


apiVersion: v1

kind: Pod

metadata:

name: test

spec:

containers:

  • name: bi

image: busybox

imagePullPolicy: IfNotPresent

command: [“bin/sh”,“-c”,“sleep 45”]

env:

  • name: HN

valueFrom:

fieldRef:

fieldPath: spec.nodeName

[root@master ~]# kubectl delete -f test.yml

pod “test” deleted

[root@master ~]# kubectl apply -f test.yml

pod/test created

[root@master ~]# kubectl get pod

NAME READY STATUS RESTARTS AGE

test 1/1 Running 0 17s

[root@master ~]# kubectl exec -it test – /bin/sh

/ # echo $HN

node1

第四种

[root@master ~]# cat test.yml


apiVersion: v1

kind: Pod

metadata:

name: test

spec:

containers:

  • name: bi

image: busybox

imagePullPolicy: IfNotPresent

command: [“bin/sh”,“-c”,“sleep 45”]

env:

  • name: HN

valueFrom:

fieldRef:

fieldPath: status.podIP

[root@master ~]# kubectl delete -f test.yml

pod “test” deleted

[root@master ~]# kubectl apply -f test.yml

pod/test created

[root@master ~]# kubectl exec -it test – /bin/sh

/ # echo $HN

10.244.1.84

/ # exit

[root@master ~]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

test 1/1 Running 1 50s 10.244.1.84 node1

init Container(初始化容器)


初始化容器

  • Init Container:用于初始化工作,执行完就结束(一次性任务)

  • 支持大部分应用容器配置,但不支持健康检查

  • 优先应用容器执行

应用场景:

  • 环境检查:例如确保应用容器依赖的服务启动后再启动应用容器

  • 初始化配置:例如给应用容器准备配置文件

在这里插入图片描述

示例

这里部署一个web网站,网站程序没有打到镜像中,而是希望从代码仓库中动态拉取放到应用容器中

在这里插入代码片[root@master ~]# cat test.yml


apiVersion: v1

kind: Pod

metadata:

name: web

namespace: default

spec:

initContainers:

  • name: download

image: busybox

imagePullPolicy: IfNotPresent

volumeMounts:

  • name: data

mountPath: /tmp

containers:

  • name: nginx

image: nginx

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 80

hostPort: 80

volumeMounts:

  • name: data

mountPath: /usr/share/nginx/html

volumes:

  • name: data

hostPath:

path: /var/www/html

//不管在哪个节点我都创建

[root@node1 ~]# mkdir /var/www/html/ -p

[root@node1 ~]# cd /var/www/html/

[root@node1 html]# echo “1314444” > index.html

[root@node1 html]# cat index.html

1314444

[root@node2 ~]# mkdir /var/www/html/ -p

[root@node2 ~]# cd /var/www/html/

[root@node2 html]# echo “hello world” > index.html

[root@node2 html]# cat index.html

hello world

[root@master ~]# kubectl apply -f test.yml

pod/web created

[root@master ~]# kubectl get pod

NAME READY STATUS RESTARTS AGE

web 1/1 Running 0 8s

[root@master ~]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

web 1/1 Running 0 45s 10.244.1.85 node1

[root@master ~]# curl 10.244.1.85

1314444

//详细信息

[root@master ~]# kubectl describe pod web

Name: web

Namespace: default

Priority: 0

Node: node1/192.168.129.135

Start Time: Wed, 22 Dec 2021 22:27:06 +0800

Labels:

Annotations:

Status: Running

IP: 10.244.1.86

IPs:

IP: 10.244.1.86

Init Containers:

download:

Container ID: docker://ec747a2654371d818661cc8e1da08d465d15e8d8d13c3a8d6a47f1ca21106d94

Image: busybox

Image ID: docker-pullable://busybox@sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd0397f25fae164abe1e8a6a

Port:

Host Port:

State: Terminated

Reason: Completed

Exit Code: 0

Started: Wed, 22 Dec 2021 22:27:07 +0800

Finished: Wed, 22 Dec 2021 22:27:07 +0800

Ready: True

Restart Count: 0

Environment:

Mounts:

/tmp from data (rw)

/var/run/secrets/kubernetes.io/serviceaccount from default-token-ck7n4 (ro)

Containers:

nginx:

Container ID: docker://6dd618f9591a8d27623d1394d07def8498e25741af293ff5ef101db3516206e1

Image: nginx

Image ID: docker-pullable://nginx@sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603

Port: 80/TCP

Host Port: 80/TCP

State: Running

Started: Wed, 22 Dec 2021 22:27:08 +0800

Ready: True

Restart Count: 0

Environment:

Mounts:

/usr/share/nginx/html from data (rw)

/var/run/secrets/kubernetes.io/serviceaccount from default-token-ck7n4 (ro)

Conditions:

Type Status

Initialized True

Ready True

ContainersReady True

PodScheduled True

Volumes:

data:

Type: HostPath (bare host directory volume)

Path: /var/www/html

HostPathType:

default-token-ck7n4:

Type: Secret (a volume populated by a Secret)

SecretName: default-token-ck7n4

Optional: false

QoS Class: BestEffort

Node-Selectors:

Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s

node.kubernetes.io/unreachable:NoExecute op=Exists for 300s

Events:

Type Reason Age From Message


Normal Scheduled 6m35s default-scheduler Successfully assigned default/web to node1

Normal Pulled 6m34s kubelet Container image “busybox” already present on machine

Normal Created 6m34s kubelet Created container download

Normal Started 6m34s kubelet Started container download

Normal Pulled 6m33s kubelet Container image “nginx” already present on machine

Normal Created 6m33s kubelet Created container nginx

Normal Started 6m33s kubelet Started container nginx

总结:Pod中会有这几种类型的容器

  • Infrastructure Container:基础容器

维护整个Pod网络空间

  • lnitContainers:初始化容器

先于业务容器开始执行

  • Containers:业务容器

并行启动

先简单的做出两个运行httpd程序的pod


[root@master httpd]# vim Dockerfile

FROM busybox

RUN mkdir /data && \

echo “test page on jjyy” > /data/index.html

ENTRYPOINT [“/bin/httpd”,“-f”,“-h”,“/data”]

[root@master ~]# docker build -t 1314444/httpd:v0.1 httpd

[root@master ~]# vim httpd/Dockerfile

FROM busybox

RUN mkdir /data && \

echo “test page on 666” > /data/index.html

ENTRYPOINT [“/bin/httpd”,“-f”,“-h”,“/data”]

[root@master ~]# docker build -t 1314444/httpd:v0.2 httpd

web


[root@master ~]# cat manifest/web.yml


apiVersion: apps/v1

kind: Deployment

metadata:

name: web1

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: web1

template:

metadata:

labels:

app: web1

spec:

containers:

  • name: web1

image: 1314444/httpd:v0.1

imagePullPolicy: IfNotPresent


apiVersion: v1

kind: Service

metadata:

name: web1

namespace: default

spec:

ports:

  • port: 80

protocol: TCP

targetPort: 80

selector:

app: web1

type: NodePort


apiVersion: apps/v1

kind: Deployment

metadata:

name: web2

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: web2

template:

metadata:

labels:

app: web2

spec:

containers:

  • name: web2

image: 1314444/httpd:v0.2

imagePullPolicy: IfNotPresent


apiVersion: v1

kind: Service

metadata:

name: web2

namespace: default

spec:

ports:

  • port: 80

protocol: TCP

targetPort: 80

selector:

app: web2

type: NodePort

[root@master ~]# kubectl apply -f manifest/web1.yml

deployment.apps/web1 created

service/web1 created

[root@master ~]# kubectl apply -f manifest/web2.yml

deployment.apps/web2 created

service/web2 created

[root@master ~]# kubectl get pod,svc

NAME READY STATUS RESTARTS AGE

pod/web1-855b788957-8fzpg 1/1 Running 0 17m

pod/web2-5f7456967b-t5vqs 1/1 Running 0 17m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

service/kubernetes ClusterIP 10.96.0.1 443/TCP 3d8h

service/web1 NodePort 10.101.207.28 80:31807/TCP 17m

service/web2 NodePort 10.100.246.130 80:31413/TCP 17m

haproxy


[root@master ~]# cat manifest/haproxy.yml


apiVersion: v1

kind: Pod

metadata:

name: haproxy

namespace: default

labels:

app: haproxy

spec:

restartPolicy: OnFailure

initContainers:

  • name: data

volumeMounts:

  • name: data

mountPath: /tmp

containers:

  • image: 1314444/haproxy:v0.3

imagePullPolicy: IfNotPresent

name: haproxy

env:

  • name: RSIP

value: “web1 web2”

livenessProbe:

tcpSocket:

port: 80

initialDelaySeconds: 20

periodSeconds: 10

readinessProbe:

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

tContainers:

  • name: data

volumeMounts:

  • name: data

mountPath: /tmp

containers:

  • image: 1314444/haproxy:v0.3

imagePullPolicy: IfNotPresent

name: haproxy

env:

  • name: RSIP

value: “web1 web2”

livenessProbe:

tcpSocket:

port: 80

initialDelaySeconds: 20

periodSeconds: 10

readinessProbe:

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-DV7owxEL-1710884208415)]
[外链图片转存中…(img-e0Rojlcd-1710884208416)]
[外链图片转存中…(img-1zQGiQQl-1710884208416)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-dKJwqdgV-1710884208417)]

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值