k8s 重启策略、健康检查、环境变量,天呐
这里部署一个web网站,网站程序没有打到镜像中,而是希望从代码仓库中动态拉取放到应用容器中。(img-DV7owxEL-1710884208415)](img-e0Rojlcd-1710884208416)](img-1zQGiQQl-1710884208416)](img-dKJwqdgV-1710884208417)]Init Container:用于初始化工作,执行完就结束(一次性任务)环境
[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:用于初始化工作,执行完就结束(一次性任务)
-
支持大部分应用容器配置,但不支持健康检查
-
优先应用容器执行
应用场景:
-
环境检查:例如确保应用容器依赖的服务启动后再启动应用容器
-
初始化配置:例如给应用容器准备配置文件
示例
这里部署一个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:业务容器
并行启动
[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
[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
[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开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
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)]
更多推荐
所有评论(0)