本文使用busybox镜像,并尽量使用命令行,试图解释K8S中的各种资源。
一、 一个pod的配置(busy-pod.yaml)
apiVersion: v1
kind: Pod
metadata:
name: busy-pod
spec:
restartPolicy: Never
containers:
- name: busy-container
image: "busybox"
command: ["/bin/sh","-c"]
args: ["echo hello>/var/www/index.html && httpd -p 80 -h /var/www&& tail -f /dev/null"]
可以使用以下命令创建一个pod,但无法直接用create pod 的方法直接创建一个pod
kubectl create -f busy-pod.yaml
但此时只能在某一个node中创建pod,也无法进行scale。
二、 使用busybox 创建一个deployment:
1. 命令方式
kubectl create deployment busy-deploy --image=busybox -- /bin/sh -c "httpd -p 80 tail -f /dev/null"
此时会创建一个名字为busy-deploy的对象,同时会创建一个以busy-deploy开头的pod。
2. yaml形式,busy-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: busy-deploy # deployment的名字
spec:
selector:
matchLabels:
run: busy-http #使用label对template中的pod进行选择
replicas: 1 # 水平生成pod的复制集
# 生成pod的模板
template:
metadata:
labels:
run: busy-http #使用label,为其它资源使用该pod提供依据
spec:
containers:
- name: busy-http-container #出现在docker容器的名字中
image: busybox
# 容器默认执行的命令,tail -f 是保证程序始终处于前台阻塞
command: ["/bin/sh","-c"]
args: ["echo hello>/var/www/index.html && httpd -p 80 -h /var/www&& tail -f /dev/null"]
# 在pod中的container开放的端口(也可以不设置)
ports:
- containerPort: 80
3. 对deployment进行水平扩容
无论是用何种方式创建的deployment,都可以使用以下方式进行动态的扩容:
kubectl scale deployment/busy-deploy --replicas=3
三、创建Service
1. 命令行:
(1) 利用已发布的deployment,创建service
kubectl expose deployment busy-deploy --name=busy-svc1 --port=3001 --target-port=80 type=NodePort
此时,可以使用service的ip:port,或host的ip:随机分配的端口,访问服务。
(2) 也可以利用pod进行发布:
kubectl expose pod busy-deploy-68dd7c4c75-679dz --name busy-svc2 --port 3003 --target-port=80 --type=NodePort
此时,只也可在service ip和host ip上都 可以访问service,但pod是不可以进行针对本服务的扩容的。
2. 配置方式:
apiVersion: v1
kind: Service
metadata:
name: busy-svc
spec:
type: NodePort
ports:
- port: 9000
targetPort: 80
nodePort: 30001
selector:
run: busy-http
在此使用selector选择,由(二.2)的template生成的所有的pod
网友评论