apiVersion, kind, metadata, spec, status(只读)
spec:
containers
nodeSelector
nodeName
restartPolicy:
Always, Never, OnFailure
containers:
name
image
imagePullPolicy:Always、Never、IfNotPresent
ports:
name
containerPort
livenessProbe
readinessProbe
liftcycle
ExecAction: exec
TCPSocketAction:tcpSocket
HTTPGetAction: httpGet
Pod控制器:
ReplicationController:
ReplicaSet:
Deployment:
DaemonSet:
Job:
Cronjob:
StatefulSet
TPR: Third Party Resources, 1.2+, 1.7
CDR: Custom Defined Resources, 1.8+
Operator:
ReplicaSet控制器示例:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
name: myapp-pod
labels:
app: myapp
release: canary
environment: qa
spec:
containers:
- name: myapp-container
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
Deployment控制器示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v2
ports:
- name: http
containerPort: 80
DaemonSet控制器示例:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-ds
namespace: default
spec:
selector:
matchLabels:
app: filebeat
release: stable
template:
metadata:
labels:
app: filebeat
release: stable
spec:
containers:
- name: filebeat
image: ikubernetes/filebeat:5.6.5-alpine
env:
- name: REDIS_HOST
value: redis.default.svc.cluster.local
- name: REDIS_LOG_LEVEL
value: info
master:
[root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 4d liveness-httpget-pod 1/1 Running 1 1d myapp-848b5b879b-4cd8x 1/1 Running 0 4d myapp-848b5b879b-rt8bs 1/1 Running 0 4d myapp-848b5b879b-wmgd8 1/1 Running 0 4d nginx-deploy-5b595999-n52b5 1/1 Running 0 4d pod-demo 2/2 Running 6 2d poststart-pod 0/1 CrashLoopBackOff 29 22h readiness-httpget-pod 1/1 Running 0 23h [root@master manifests]# kubectl delete -f poststart-pod.yaml [root@master manifests]# kubectl explain rs [root@master manifests]# kubectl explain rs.spec [root@master manifests]# kubectl explain rs.spec.template [root@master manifests]# kubectl explain rs.spec.template.spec [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 4d liveness-httpget-pod 1/1 Running 1 1d myapp-848b5b879b-4cd8x 1/1 Running 0 4d myapp-848b5b879b-rt8bs 1/1 Running 0 4d myapp-848b5b879b-wmgd8 1/1 Running 0 4d nginx-deploy-5b595999-n52b5 1/1 Running 0 4d pod-demo 2/2 Running 7 3d readiness-httpget-pod 1/1 Running 0 1d [root@master manifests]# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE myapp 3 3 3 3 4d nginx-deploy 1 1 1 1 4d [root@master manifests]# kubectl delete deploy myapp [root@master manifests]# kubectl delete deploy nginx-deploy [root@master manifests]# vim rs-demo.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: name: myapp-pod labels: app: myapp release: canary environment: qa spec: containers: - name: myapp-container image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 [root@master manifests]# kubectl create -f rs-demo.yaml [root@master manifests]# kubectl get rs NAME DESIRED CURRENT READY AGE myapp 2 2 2 13s [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 4d liveness-httpget-pod 1/1 Running 1 1d myapp-5qpr9 1/1 Running 0 5m myapp-jbzwq 1/1 Running 0 5m pod-demo 2/2 Running 7 3d readiness-httpget-pod 1/1 Running 0 1d [root@master manifests]# kubectl describe pods myapp-5qpr9 Name: myapp-5qpr9 Namespace: default Priority: 0 PriorityClassName: <none> Node: node02.smoke.com/172.20.0.67 Start Time: Thu, 07 May 2020 21:43:32 +0800 Labels: app=myapp environment=qa release=canary Annotations: <none> Status: Running IP: 10.244.2.16 Controlled By: ReplicaSet/myapp Containers: myapp-container: Container ID: docker://dc7def392a67797e3051b835bdc8946f3a4404a7faf63c3771a34fdceb2956bb Image: ikubernetes/myapp:v1 Image ID: docker-pullable://ikubernetes/myapp@sha256:9c3dc30b5219788b2b8a4b065f548b922a34479577befb54b03330999d30d513 Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 07 May 2020 21:43:37 +0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-xvxpl (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-xvxpl: Type: Secret (a volume populated by a Secret) SecretName: default-token-xvxpl Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 6m default-scheduler Successfully assigned default/myapp-5qpr9 to node02.smoke.com Normal Pulled 6m kubelet, node02.smoke.com Container image "ikubernetes/myapp:v1" already present on machine Normal Created 6m kubelet, node02.smoke.com Created container Normal Started 6m kubelet, node02.smoke.com Started container [root@master manifests]# curl 10.244.2.16 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 5d liveness-httpget-pod 1/1 Running 1 2d myapp-5qpr9 1/1 Running 0 22h myapp-jbzwq 1/1 Running 0 22h pod-demo 2/2 Running 10 3d readiness-httpget-pod 1/1 Running 0 1d [root@master manifests]# kubectl delete pods myapp-5qpr9 [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 5d liveness-httpget-pod 1/1 Running 1 2d myapp-4kmnr 1/1 Running 0 17s myapp-jbzwq 1/1 Running 0 22h pod-demo 2/2 Running 10 3d readiness-httpget-pod 1/1 Running 0 1d [root@master manifests]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS client 1/1 Running 0 5d run=client liveness-httpget-pod 1/1 Running 1 2d <none> myapp-4kmnr 1/1 Running 0 2m app=myapp,environment=qa,release=canary myapp-jbzwq 1/1 Running 0 22h app=myapp,environment=qa,release=canary pod-demo 2/2 Running 10 3d app=myapp,tier=frontend readiness-httpget-pod 1/1 Running 0 1d <none> [root@master manifests]# kubectl label pods pod-demo release=canary [root@master manifests]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS client 1/1 Running 0 5d run=client liveness-httpget-pod 1/1 Running 1 2d <none> myapp-jbzwq 1/1 Running 0 22h app=myapp,environment=qa,release=canary pod-demo 2/2 Running 10 3d app=myapp,release=canary,tier=frontend readiness-httpget-pod 1/1 Running 0 1d <none> [root@master manifests]# kubectl delete pods pod-demo [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 5d liveness-httpget-pod 1/1 Running 1 2d myapp-7j7sr 1/1 Running 0 4m myapp-jbzwq 1/1 Running 0 22h readiness-httpget-pod 1/1 Running 0 1d [root@master manifests]# kubectl edit rs myapp # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: creationTimestamp: 2020-05-07T13:43:31Z generation: 1 name: myapp namespace: default resourceVersion: "246101" selfLink: /apis/extensions/v1beta1/namespaces/default/replicasets/myapp uid: bd8085ae-9068-11ea-8ad3-000c2967e570 spec: replicas: 5 #吧数量从2个改成5个 selector: matchLabels: app: myapp release: canary template: metadata: creationTimestamp: null labels: app: myapp environment: qa release: canary name: myapp-pod spec: containers: - image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent name: myapp-container ports: - containerPort: 80 name: http protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 2 fullyLabeledReplicas: 2 observedGeneration: 1 readyReplicas: 2 replicas: 2 [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 5d liveness-httpget-pod 1/1 Running 1 2d myapp-7j7sr 1/1 Running 0 21m myapp-cm645 1/1 Running 0 2m myapp-fnd2q 1/1 Running 0 2m myapp-hf52s 1/1 Running 0 2m myapp-jbzwq 1/1 Running 0 23h readiness-httpget-pod 1/1 Running 0 2d [root@master manifests]# kubectl edit rs myapp # Please edit the object below. Lines beginning with a '#' will be ignored, # and an empty file will abort the edit. If an error occurs while saving this file will be # reopened with the relevant failures. # apiVersion: extensions/v1beta1 kind: ReplicaSet metadata: creationTimestamp: 2020-05-07T13:43:31Z generation: 2 labels: app: myapp environment: qa release: canary name: myapp namespace: default resourceVersion: "247679" selfLink: /apis/extensions/v1beta1/namespaces/default/replicasets/myapp uid: bd8085ae-9068-11ea-8ad3-000c2967e570 spec: replicas: 5 selector: matchLabels: app: myapp release: canary template: metadata: creationTimestamp: null labels: app: myapp environment: qa release: canary name: myapp-pod spec: containers: - image: ikubernetes/myapp:v2 #将镜像从v1改为v2 imagePullPolicy: IfNotPresent name: myapp-container ports: - containerPort: 80 name: http protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 status: availableReplicas: 5 fullyLabeledReplicas: 5 observedGeneration: 2 readyReplicas: 5 replicas: 5 [root@master manifests]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE client 1/1 Running 0 6d 10.244.2.3 node02.smoke.com liveness-httpget-pod 1/1 Running 1 3d 10.244.2.12 node02.smoke.com myapp-7j7sr 1/1 Running 0 1d 10.244.2.18 node02.smoke.com myapp-cm645 1/1 Running 0 1d 10.244.1.18 node01.smoke.com myapp-fnd2q 1/1 Running 0 1d 10.244.2.19 node02.smoke.com myapp-hf52s 1/1 Running 0 1d 10.244.1.17 node01.smoke.com myapp-jbzwq 1/1 Running 0 2d 10.244.1.16 node01.smoke.com readiness-httpget-pod 1/1 Running 0 3d 10.244.2.13 node02.smoke.com [root@master manifests]# kubectl get rs -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR myapp 5 5 5 23h myapp-container ikubernetes/myapp:v2 app=myapp,release=canary [root@master manifests]# curl 10.244.1.17 #还是v1版本,改了控制器pod资源并不会改掉,因为pod资源足额不会被重建的,只有重建的pod资源它的版本才是v2; Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@master manifests]# kubectl delete pods myapp-7j7sr [root@master manifests]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE client 1/1 Running 0 6d 10.244.2.3 node02.smoke.com liveness-httpget-pod 1/1 Running 1 3d 10.244.2.12 node02.smoke.com myapp-6npts 1/1 Running 0 20s 10.244.2.20 node02.smoke.com myapp-cm645 1/1 Running 0 1d 10.244.1.18 node01.smoke.com myapp-fnd2q 1/1 Running 0 1d 10.244.2.19 node02.smoke.com myapp-hf52s 1/1 Running 0 1d 10.244.1.17 node01.smoke.com myapp-jbzwq 1/1 Running 0 2d 10.244.1.16 node01.smoke.com readiness-httpget-pod 1/1 Running 0 3d 10.244.2.13 node02.smoke.com [root@master manifests]# curl 10.244.2.20 Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a> [root@master manifests]# curl 10.244.1.18 Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a> [root@master manifests]# kubectl explain deploy [root@master manifests]# kubectl explain deploy.spec [root@master manifests]# kubectl explain deploy.spec.strategy [root@master manifests]# kubectl explain deploy.spec.strategy.rollingUpdate [root@master manifests]# kubectl explain deploy.spec.template [root@master manifests]# kubectl get rs NAME DESIRED CURRENT READY AGE myapp 5 5 5 2d [root@master manifests]# kubectl delete rs myapp [root@master manifests]# vim deploy-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 [root@master manifests]# kubectl apply -f deploy-demo.yaml #apply即可以创建也可以更新 [root@master manifests]# kubectl get deploy NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE myapp-deploy 2 2 2 2 9m [root@master manifests]# kubectl get rs NAME DESIRED CURRENT READY AGE myapp-deploy-69b47bc96d 2 2 2 10m [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 7d liveness-httpget-pod 1/1 Running 2 4d myapp-deploy-69b47bc96d-sftgw 1/1 Running 0 11m myapp-deploy-69b47bc96d-zpzwn 1/1 Running 0 11m readiness-httpget-pod 1/1 Running 0 4d [root@master manifests]# vim deploy-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 3 #把副本数改为3个 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 [root@master manifests]# kubectl apply -f deploy-demo.yaml [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 7d liveness-httpget-pod 1/1 Running 2 4d myapp-deploy-69b47bc96d-rhnsw 1/1 Running 0 54s myapp-deploy-69b47bc96d-sftgw 1/1 Running 0 20m myapp-deploy-69b47bc96d-zpzwn 1/1 Running 0 20m readiness-httpget-pod 1/1 Running 0 4d [root@master manifests]# kubectl describe deploy myapp-deploy Name: myapp-deploy Namespace: default CreationTimestamp: Sun, 10 May 2020 21:19:34 +0800 Labels: <none> Annotations: deployment.kubernetes.io/revision=1 kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations" :{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":3,"selector":{... Selector: app=myapp,release=canary Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=myapp release=canary Containers: myapp: Image: ikubernetes/myapp:v1 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Progressing True NewReplicaSetAvailable Available True MinimumReplicasAvailable OldReplicaSets: <none> NewReplicaSet: myapp-deploy-69b47bc96d (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 21m deployment-controller Scaled up replica set myapp-deploy-69b47bc96d to 2 Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set myapp-deploy-69b47bc96d to 3 [root@master manifests]# kubectl get pods -w NAME READY STATUS RESTARTS AGE client 1/1 Running 0 7d liveness-httpget-pod 1/1 Running 2 4d myapp-deploy-69b47bc96d-rhnsw 1/1 Running 0 3m myapp-deploy-69b47bc96d-sftgw 1/1 Running 0 22m myapp-deploy-69b47bc96d-zpzwn 1/1 Running 0 22m readiness-httpget-pod 1/1 Running 0 4d [root@master manifests]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-69b47bc96d-rhnsw 1/1 Running 0 3m myapp-deploy-69b47bc96d-sftgw 1/1 Running 0 23m myapp-deploy-69b47bc96d-zpzwn 1/1 Running 0 23m [root@master manifests]# vim deploy-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: ikubernetes/myapp:v2 #将版本从v1改为v2 ports: - name: http containerPort: 80 [root@master manifests]# kubectl apply -f deploy-demo.yaml [root@master manifests]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-69b47bc96d-rhnsw 1/1 Running 0 3m myapp-deploy-69b47bc96d-sftgw 1/1 Running 0 23m myapp-deploy-69b47bc96d-zpzwn 1/1 Running 0 23m myapp-deploy-67f6f6b4dc-8ngsn 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-8ngsn 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-8ngsn 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 2s myapp-deploy-69b47bc96d-rhnsw 1/1 Terminating 0 6m myapp-deploy-67f6f6b4dc-plxkk 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-plxkk 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-plxkk 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 2s myapp-deploy-69b47bc96d-sftgw 1/1 Terminating 0 26m myapp-deploy-69b47bc96d-rhnsw 0/1 Terminating 0 6m myapp-deploy-67f6f6b4dc-dk9r4 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-dk9r4 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-dk9r4 0/1 ContainerCreating 0 0s myapp-deploy-69b47bc96d-sftgw 0/1 Terminating 0 26m myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 3s myapp-deploy-69b47bc96d-zpzwn 1/1 Terminating 0 26m myapp-deploy-69b47bc96d-zpzwn 0/1 Terminating 0 26m myapp-deploy-69b47bc96d-sftgw 0/1 Terminating 0 26m myapp-deploy-69b47bc96d-sftgw 0/1 Terminating 0 26m myapp-deploy-69b47bc96d-rhnsw 0/1 Terminating 0 6m myapp-deploy-69b47bc96d-rhnsw 0/1 Terminating 0 6m myapp-deploy-69b47bc96d-zpzwn 0/1 Terminating 0 26m myapp-deploy-69b47bc96d-zpzwn 0/1 Terminating 0 26m [root@master manifests]# kubectl get rs NAME DESIRED CURRENT READY AGE myapp-deploy-67f6f6b4dc 3 3 3 1m myapp-deploy-69b47bc96d 0 0 0 27m [root@master manifests]# kubectl get rs -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR myapp-deploy-67f6f6b4dc 3 3 3 1m myapp ikubernetes/myapp:v2 app=myapp,pod-template-hash=2392926087, release=canary myapp-deploy-69b47bc96d 0 0 0 27m myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=2560367528, release=canary [root@master manifests]# kubectl rollout --help [root@master manifests]# kubectl rollout history --help [root@master manifests]# kubectl rollout history deployment myapp-deploy #查看滚动历史 deployments "myapp-deploy" REVISION CHANGE-CAUSE 1 <none> 2 <none> [root@master manifests]# kubectl patch --help [root@master manifests]# kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}' #打补丁,修改replicas副本数为5个 [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 7d liveness-httpget-pod 1/1 Running 2 4d myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 7m myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 7m myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 7m myapp-deploy-67f6f6b4dc-sjmzl 1/1 Running 0 13s myapp-deploy-67f6f6b4dc-wds5j 1/1 Running 0 13s readiness-httpget-pod 1/1 Running 0 4d [root@master manifests]# kubectl rollout --help [root@master manifests]# kubectl rollout pause --help [root@master manifests]# kubectl explain deploy.spec.strategy [root@master manifests]# kubectl explain deploy.spec.strategy.rollingUpdate [root@master manifests]# kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' [root@master manifests]# kubectl describe deployment myapp-deploy Name: myapp-deploy Namespace: default CreationTimestamp: Sun, 10 May 2020 21:19:34 +0800 Labels: app=myapp release=canary Annotations: deployment.kubernetes.io/revision=2 kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations" :{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":3,"selector":{... Selector: app=myapp,release=canary Replicas: 5 desired | 5 updated | 5 total | 5 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 0 max unavailable, 1 max surge Pod Template: Labels: app=myapp release=canary Containers: myapp: Image: ikubernetes/myapp:v2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Progressing True NewReplicaSetAvailable Available True MinimumReplicasAvailable OldReplicaSets: <none> NewReplicaSet: myapp-deploy-67f6f6b4dc (5/5 replicas created) Events: <none> [root@master manifests]# kubectl set image --help [root@master manifests]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-sjmzl 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-wds5j 1/1 Running 0 23h [root@master manifests]# kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy #更新后暂停 [root@master manifests]# kubectl get pods -l app=myapp -w #创建完成后暂停 NAME READY STATUS RESTARTS AGE myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-sjmzl 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-wds5j 1/1 Running 0 23h myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-ftjst 0/1 ContainerCreating 0 1s myapp-deploy-6bdcd6755d-ftjst 1/1 Running 0 7s [root@master manifests]# kubectl rollout status deployment myapp-deploy #查看更新过程 Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 5 new replicas have been updated... [root@master manifests]# kubectl rollout --help [root@master manifests]# kubectl rollout resume deployment myapp-deploy #继续更新 [root@master manifests]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-sjmzl 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-wds5j 1/1 Running 0 23h myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-ftjst 0/1 ContainerCreating 0 1s myapp-deploy-6bdcd6755d-ftjst 1/1 Running 0 7s myapp-deploy-67f6f6b4dc-sjmzl 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-pp6mz 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-pp6mz 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-pp6mz 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-pp6mz 1/1 Running 0 8s myapp-deploy-67f6f6b4dc-wds5j 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-qcv5p 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-qcv5p 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-qcv5p 0/1 ContainerCreating 0 1s myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-qcv5p 1/1 Running 0 4s myapp-deploy-67f6f6b4dc-dk9r4 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-z2w6c 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 0/1 ContainerCreating 0 1s myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 1/1 Running 0 6s myapp-deploy-67f6f6b4dc-plxkk 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-9p2x5 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-9p2x5 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-9p2x5 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-9p2x5 1/1 Running 0 6s myapp-deploy-67f6f6b4dc-8ngsn 1/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-8ngsn 0/1 Terminating 0 23h [root@master manifests]# kubectl rollout status deployment myapp-deploy Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 5 new replicas have been updated... Waiting for deployment spec update to be observed... Waiting for deployment spec update to be observed... Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 2 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 2 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 2 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 3 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 4 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 4 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 4 out of 5 new replicas have been updated... Waiting for deployment "myapp-deploy" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "myapp-deploy" rollout to finish: 1 old replicas are pending termination... deployment "myapp-deploy" successfully rolled out [root@master manifests]# kubectl get rs -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR myapp-deploy-67f6f6b4dc 0 0 0 23h myapp ikubernetes/myapp:v2 app=myapp,pod-template-hash=2392926087, release=canary myapp-deploy-69b47bc96d 0 0 0 23h myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=2560367528, release=canary myapp-deploy-6bdcd6755d 5 5 5 11m myapp ikubernetes/myapp:v3 app=myapp,pod-template-hash=2687823118, release=canary [root@master manifests]# kubectl rollout undo --help [root@master manifests]# kubectl rollout history deployment myapp-deploy deployments "myapp-deploy" #查看当前版本 REVISION CHANGE-CAUSE 1 <none> 2 <none> 3 <none> [root@master manifests]# kubectl rollout undo deployment myapp-deploy --to-revision=1 #回滚到第一个版本 [root@master ~]# kubectl get pods -l app=myapp -w NAME READY STATUS RESTARTS AGE myapp-deploy-67f6f6b4dc-8ngsn 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-dk9r4 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-plxkk 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-sjmzl 1/1 Running 0 23h myapp-deploy-67f6f6b4dc-wds5j 1/1 Running 0 23h myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-ftjst 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-ftjst 0/1 ContainerCreating 0 1s myapp-deploy-6bdcd6755d-ftjst 1/1 Running 0 7s myapp-deploy-67f6f6b4dc-sjmzl 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-pp6mz 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-pp6mz 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-pp6mz 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-sjmzl 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-pp6mz 1/1 Running 0 8s myapp-deploy-67f6f6b4dc-wds5j 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-qcv5p 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-qcv5p 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-qcv5p 0/1 ContainerCreating 0 1s myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-qcv5p 1/1 Running 0 4s myapp-deploy-67f6f6b4dc-dk9r4 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-z2w6c 0/1 Pending 0 0s myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-wds5j 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 0/1 ContainerCreating 0 1s myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-z2w6c 1/1 Running 0 6s myapp-deploy-67f6f6b4dc-plxkk 1/1 Terminating 0 23h myapp-deploy-6bdcd6755d-9p2x5 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-9p2x5 0/1 Pending 0 0s myapp-deploy-6bdcd6755d-9p2x5 0/1 ContainerCreating 0 0s myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-6bdcd6755d-9p2x5 1/1 Running 0 6s myapp-deploy-67f6f6b4dc-8ngsn 1/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-dk9r4 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-8ngsn 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-8ngsn 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-8ngsn 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-67f6f6b4dc-plxkk 0/1 Terminating 0 23h myapp-deploy-69b47bc96d-vkksx 0/1 Pending 0 0s myapp-deploy-69b47bc96d-vkksx 0/1 Pending 0 0s myapp-deploy-69b47bc96d-vkksx 0/1 ContainerCreating 0 0s myapp-deploy-69b47bc96d-vkksx 1/1 Running 0 2s myapp-deploy-6bdcd6755d-9p2x5 1/1 Terminating 0 6m myapp-deploy-69b47bc96d-p9b98 0/1 Pending 0 0s myapp-deploy-69b47bc96d-p9b98 0/1 Pending 0 0s myapp-deploy-69b47bc96d-p9b98 0/1 ContainerCreating 0 0s myapp-deploy-6bdcd6755d-9p2x5 0/1 Terminating 0 6m myapp-deploy-69b47bc96d-p9b98 1/1 Running 0 3s myapp-deploy-6bdcd6755d-z2w6c 1/1 Terminating 0 6m myapp-deploy-69b47bc96d-mxlpg 0/1 Pending 0 0s myapp-deploy-69b47bc96d-mxlpg 0/1 Pending 0 0s myapp-deploy-69b47bc96d-mxlpg 0/1 ContainerCreating 0 2s myapp-deploy-6bdcd6755d-z2w6c 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-z2w6c 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-z2w6c 0/1 Terminating 0 7m myapp-deploy-69b47bc96d-mxlpg 1/1 Running 0 8s myapp-deploy-6bdcd6755d-qcv5p 1/1 Terminating 0 7m myapp-deploy-6bdcd6755d-9p2x5 0/1 Terminating 0 7m myapp-deploy-69b47bc96d-9xq44 0/1 Pending 0 0s myapp-deploy-69b47bc96d-9xq44 0/1 Pending 0 1s myapp-deploy-6bdcd6755d-9p2x5 0/1 Terminating 0 7m myapp-deploy-69b47bc96d-9xq44 0/1 ContainerCreating 0 1s myapp-deploy-6bdcd6755d-qcv5p 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-qcv5p 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-qcv5p 0/1 Terminating 0 7m myapp-deploy-69b47bc96d-9xq44 1/1 Running 0 4s myapp-deploy-6bdcd6755d-pp6mz 1/1 Terminating 0 7m myapp-deploy-69b47bc96d-v4sdf 0/1 Pending 0 0s myapp-deploy-69b47bc96d-v4sdf 0/1 Pending 0 1s myapp-deploy-69b47bc96d-v4sdf 0/1 ContainerCreating 0 2s myapp-deploy-6bdcd6755d-pp6mz 0/1 Terminating 0 7m myapp-deploy-69b47bc96d-v4sdf 1/1 Running 0 4s myapp-deploy-6bdcd6755d-pp6mz 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-pp6mz 0/1 Terminating 0 7m myapp-deploy-6bdcd6755d-ftjst 1/1 Terminating 0 16m myapp-deploy-6bdcd6755d-ftjst 0/1 Terminating 0 16m myapp-deploy-6bdcd6755d-ftjst 0/1 Terminating 0 16m myapp-deploy-6bdcd6755d-ftjst 0/1 Terminating 0 16m [root@master manifests]# kubectl rollout history deployment myapp-deploy deployments "myapp-deploy" REVISION CHANGE-CAUSE 2 <none> 3 <none> 4 <none> [root@master manifests]# kubectl get rs -o wide #当前工作的是v1版本 NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR myapp-deploy-67f6f6b4dc 0 0 0 23h myapp ikubernetes/myapp:v2 app=myapp,pod-template-hash=2392926087, release=canary myapp-deploy-69b47bc96d 5 5 5 1d myapp ikubernetes/myapp:v1 app=myapp,pod-template-hash=2560367528, release=canary myapp-deploy-6bdcd6755d 0 0 0 20m myapp ikubernetes/myapp:v3 app=myapp,pod-template-hash=2687823118, release=canary [root@master manifests]# kubectl explain ds [root@master manifests]# kubectl explain ds.spec [root@master manifests]# cp deploy-demo.yaml ds-demo.yaml
node01:
[root@node01 ~]# docker pull ikubernetes/filebeat:5.6.5-alpine
node02:
[root@node02 ~]# docker pull ikubernetes/filebeat:5.6.5-alpine
node01:
[root@node01 ~]# docker image inspect ikubernetes/filebeat:5.6.5-alpine
master:
[root@master manifests]# kubectl explain pods.spec.containers [root@master manifests]# kubectl explain pods.spec.containers.env [root@master manifests]# vim ds-demo.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: myapp-ds namespace: default spec: selector: matchLabels: app: filebeat release: stable template: metadata: labels: app: filebeat release: stable spec: containers: - name: filebeat image: ikubernetes/filebeat:5.6.5-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info [root@master manifests]# kubectl apply -f ds-demo.yaml [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 8d liveness-httpget-pod 1/1 Running 2 5d myapp-deploy-69b47bc96d-9xq44 1/1 Running 0 37m myapp-deploy-69b47bc96d-mxlpg 1/1 Running 0 38m myapp-deploy-69b47bc96d-p9b98 1/1 Running 0 38m myapp-deploy-69b47bc96d-v4sdf 1/1 Running 0 37m myapp-deploy-69b47bc96d-vkksx 1/1 Running 0 38m myapp-ds-c29sl 1/1 Running 0 34s myapp-ds-lmx8k 1/1 Running 0 34s readiness-httpget-pod 1/1 Running 0 5d [root@master manifests]# kubectl logs myapp-ds-c29sl [root@master manifests]# kubectl get pods #myapp-ds有两个,因为有两个node,不会放到master上面,因为有污点 NAME READY STATUS RESTARTS AGE client 1/1 Running 0 8d liveness-httpget-pod 1/1 Running 2 5d myapp-deploy-69b47bc96d-9xq44 1/1 Running 0 39m myapp-deploy-69b47bc96d-mxlpg 1/1 Running 0 39m myapp-deploy-69b47bc96d-p9b98 1/1 Running 0 39m myapp-deploy-69b47bc96d-v4sdf 1/1 Running 0 39m myapp-deploy-69b47bc96d-vkksx 1/1 Running 0 39m myapp-ds-c29sl 1/1 Running 0 1m myapp-ds-lmx8k 1/1 Running 0 1m readiness-httpget-pod 1/1 Running 0 5d [root@master manifests]# vim ds-demo.yaml #定义两个资源 apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: default spec: replicas: 1 selector: matchLabels: app: redis role: logstor template: metadata: labels: app: redis role: logstor spec: containers: - name: redis image: redis:4.0-alpine ports: - name: redis containerPort: 6379 --- apiVersion: apps/v1 kind: DaemonSet metadata: name: myapp-ds namespace: default spec: selector: matchLabels: app: filebeat release: stable template: metadata: labels: app: filebeat release: stable spec: containers: - name: filebeat image: ikubernetes/filebeat:5.6.5-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info [root@master manifests]# kubectl delete -f ds-demo.yaml [root@master manifests]# vim vim ds-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: default spec: replicas: 1 selector: matchLabels: app: redis role: logstor template: metadata: labels: app: redis role: logstor spec: containers: - name: redis image: redis:4.0-alpine ports: - name: redis containerPort: 6379 --- apiVersion: apps/v1 kind: DaemonSet metadata: name: filebeat-ds namespace: default spec: selector: matchLabels: app: filebeat release: stable template: metadata: labels: app: filebeat release: stable spec: containers: - name: filebeat image: ikubernetes/filebeat:5.6.5-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info [root@master manifests]# kubectl apply -f ds-demo.yaml [root@master manifests]# kubectl expose deployment redis --port=6379 [root@master manifests]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 15d myapp NodePort 10.100.224.224 <none> 80:30308/TCP 9d nginx ClusterIP 10.101.88.185 <none> 80/TCP 9d redis ClusterIP 10.106.58.175 <none> 6379/TCP 1m [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 0/1 Error 0 10d filebeat-ds-gwqhd 1/1 Running 2 1d filebeat-ds-jc6cs 1/1 Running 1 1d liveness-httpget-pod 1/1 Running 3 7d myapp-deploy-69b47bc96d-9xq44 1/1 Running 1 2d myapp-deploy-69b47bc96d-mxlpg 1/1 Running 1 2d myapp-deploy-69b47bc96d-p9b98 1/1 Running 1 2d myapp-deploy-69b47bc96d-v4sdf 1/1 Running 1 2d myapp-deploy-69b47bc96d-vkksx 1/1 Running 1 2d readiness-httpget-pod 1/1 Running 1 7d redis-5b5d6fbbbd-9m5p5 1/1 Running 1 1d [root@master manifests]# kubectl exec -it redis-5b5d6fbbbd-9m5p5 -- /bin/sh /data # netstat -tnl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN tcp 0 0 :::6379 :::* LISTEN /data # ls /data # nslookup redis.default.svc.cluster.local Server: 10.96.0.10 Address: 10.96.0.10:53 Name: redis.default.svc.cluster.local Address: 10.106.58.175 /data # redis-cli -h redis.default.svc.cluster.local redis.default.svc.cluster.local:6379> keys * (empty list or set) redis.default.svc.cluster.local:6379> exit /data # exit [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 0/1 Error 0 11d filebeat-ds-gwqhd 1/1 Running 2 1d filebeat-ds-jc6cs 1/1 Running 1 1d liveness-httpget-pod 1/1 Running 3 8d myapp-deploy-69b47bc96d-9xq44 1/1 Running 1 2d myapp-deploy-69b47bc96d-mxlpg 1/1 Running 1 2d myapp-deploy-69b47bc96d-p9b98 1/1 Running 1 2d myapp-deploy-69b47bc96d-v4sdf 1/1 Running 1 2d myapp-deploy-69b47bc96d-vkksx 1/1 Running 1 2d readiness-httpget-pod 1/1 Running 1 7d redis-5b5d6fbbbd-9m5p5 1/1 Running 1 1d [root@master manifests]# kubectl exec -it filebeat-ds-gwqhd -- /bin/sh / # ps aux PID USER TIME COMMAND 1 root 0:17 /usr/local/bin/filebeat -e -c /etc/filebeat/filebeat.yml 15 root 0:00 /bin/sh 22 root 0:00 ps aux / # cat /etc/filebeat/filebeat.yml filebeat.registry_file: /var/log/containers/filebeat_registry filebeat.idle_timeout: 5s filebeat.spool_size: 2048 logging.level: info filebeat.prospectors: - input_type: log paths: - "/var/log/containers/*.log" - "/var/log/docker/containers/*.log" - "/var/log/startupscript.log" - "/var/log/kubelet.log" - "/var/log/kube-proxy.log" - "/var/log/kube-apiserver.log" - "/var/log/kube-controller-manager.log" - "/var/log/kube-scheduler.log" - "/var/log/rescheduler.log" - "/var/log/glbc.log" - "/var/log/cluster-autoscaler.log" symlinks: true json.message_key: log json.keys_under_root: true json.add_error_key: true multiline.pattern: '^\s' multiline.match: after document_type: kube-logs tail_files: true fields_under_root: true output.redis: hosts: ${REDIS_HOST:?No Redis host configured. Use env var REDIS_HOST to set host.} key: "filebeat" / # printenv #查看REDIS_HOST是定义的redis服务器 REDIS_PORT=tcp://10.106.58.175:6379 KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT=443 REDIS_SERVICE_PORT=6379 REDIS_PORT_6379_TCP_ADDR=10.106.58.175 HOSTNAME=filebeat-ds-gwqhd SHLVL=1 HOME=/root REDIS_PORT_6379_TCP_PORT=6379 REDIS_PORT_6379_TCP_PROTO=tcp NGINX_PORT_80_TCP=tcp://10.101.88.185:80 MYAPP_SERVICE_HOST=10.100.224.224 REDIS_PORT_6379_TCP=tcp://10.106.58.175:6379 MYAPP_SERVICE_PORT=80 MYAPP_PORT=tcp://10.100.224.224:80 TERM=xterm KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 NGINX_SERVICE_HOST=10.101.88.185 MYAPP_PORT_80_TCP_ADDR=10.100.224.224 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin KUBERNETES_PORT_443_TCP_PORT=443 REDIS_LOG_LEVEL=info KUBERNETES_PORT_443_TCP_PROTO=tcp MYAPP_PORT_80_TCP_PORT=80 MYAPP_PORT_80_TCP_PROTO=tcp NGINX_SERVICE_PORT=80 NGINX_PORT=tcp://10.101.88.185:80 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 KUBERNETES_SERVICE_PORT_HTTPS=443 PWD=/ MYAPP_PORT_80_TCP=tcp://10.100.224.224:80 REDIS_SERVICE_HOST=10.106.58.175 KUBERNETES_SERVICE_HOST=10.96.0.1 REDIS_HOST=redis.default.svc.cluster.local NGINX_PORT_80_TCP_ADDR=10.101.88.185 FILEBEAT_VERSION=5.6.5 NGINX_PORT_80_TCP_PORT=80 NGINX_PORT_80_TCP_PROTO=tcp / # nslookup redis.default.svc.cluster.local nslookup: can't resolve '(null)': Name does not resolve Name: redis.default.svc.cluster.local Address 1: 10.106.58.175 redis.default.svc.cluster.local / # ps aux PID USER TIME COMMAND 1 root 0:17 /usr/local/bin/filebeat -e -c /etc/filebeat/filebeat.yml 15 root 0:00 /bin/sh 26 root 0:00 ps aux / # kill -1 1 [root@master manifests]# kubectl get pods NAME READY STATUS RESTARTS AGE client 0/1 Error 0 11d filebeat-ds-gwqhd 1/1 Running 3 1d filebeat-ds-jc6cs 1/1 Running 1 1d liveness-httpget-pod 1/1 Running 3 8d myapp-deploy-69b47bc96d-9xq44 1/1 Running 1 2d myapp-deploy-69b47bc96d-mxlpg 1/1 Running 1 2d myapp-deploy-69b47bc96d-p9b98 1/1 Running 1 2d myapp-deploy-69b47bc96d-v4sdf 1/1 Running 1 2d myapp-deploy-69b47bc96d-vkksx 1/1 Running 1 2d readiness-httpget-pod 1/1 Running 1 7d redis-5b5d6fbbbd-9m5p5 1/1 Running 1 1d [root@master manifests]# kubectl exec -it redis-5b5d6fbbbd-9m5p5 -- /bin/sh #日志还是没发送过来,主要为了演示各pod间如何调用,用svc的主机名 /data # redis-cli -h redis.default.svc.cluster.local redis.default.svc.cluster.local:6379> keys * (empty list or set) redis.default.svc.cluster.local:6379> exit /data # exit [root@master manifests]# vim ds-demo.yaml apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: default spec: replicas: 1 selector: matchLabels: app: redis role: logstor template: metadata: labels: app: redis role: logstor spec: containers: - name: redis image: redis:4.0-alpine ports: - name: redis containerPort: 6379 --- apiVersion: apps/v1 kind: DaemonSet metadata: name: filebeat-ds namespace: default spec: selector: matchLabels: app: filebeat release: stable template: metadata: labels: app: filebeat release: stable spec: containers: - name: filebeat image: ikubernetes/filebeat:5.6.5-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info [root@master manifests]# kubectl get pods -l app=filebeat -o wide #这两个资源各运行在一个节点上 NAME READY STATUS RESTARTS AGE IP NODE filebeat-ds-gwqhd 1/1 Running 3 1d 10.244.1.36 node01.smoke.com filebeat-ds-jc6cs 1/1 Running 1 1d 10.244.2.35 node02.smoke.com [root@master manifests]# kubectl explain ds.spec [root@master manifests]# kubectl explain ds.spec.updateStrategy [root@master manifests]# kubectl explain ds.spec.updateStrategy.rollingUpdate [root@master manifests]# kubectl describe ds filebeat Name: filebeat-ds Selector: app=filebeat,release=stable Node-Selector: <none> Labels: app=filebeat release=stable Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"DaemonSet","metadata":{"annotations":{}, "name":"filebeat-ds","namespace":"default"},"spec":{"selector":{"matchLabels":{... Desired Number of Nodes Scheduled: 2 Current Number of Nodes Scheduled: 2 Number of Nodes Scheduled with Up-to-date Pods: 2 Number of Nodes Scheduled with Available Pods: 2 Number of Nodes Misscheduled: 0 Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=filebeat release=stable Containers: filebeat: Image: ikubernetes/filebeat:5.6.5-alpine Port: <none> Host Port: <none> Environment: REDIS_HOST: redis.default.svc.cluster.local REDIS_LOG_LEVEL: info Mounts: <none> Volumes: <none> Events: <none> [root@master manifests]# kubectl set image --help [root@master manifests]# kubectl set image daemonsets filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine #更新版本 [root@master manifests]# kubectl get pods -w NAME READY STATUS RESTARTS AGE client 0/1 Error 0 11d filebeat-ds-jc6cs 1/1 Running 1 1d filebeat-ds-shxhs 0/1 ContainerCreating 0 14s liveness-httpget-pod 1/1 Running 3 8d myapp-deploy-69b47bc96d-9xq44 1/1 Running 1 2d myapp-deploy-69b47bc96d-mxlpg 1/1 Running 1 2d myapp-deploy-69b47bc96d-p9b98 1/1 Running 1 2d myapp-deploy-69b47bc96d-v4sdf 1/1 Running 1 2d myapp-deploy-69b47bc96d-vkksx 1/1 Running 1 2d readiness-httpget-pod 1/1 Running 1 8d redis-5b5d6fbbbd-9m5p5 1/1 Running 1 1d filebeat-ds-shxhs 1/1 Running 0 14s filebeat-ds-jc6cs 1/1 Terminating 1 1d filebeat-ds-jc6cs 0/1 Terminating 1 1d filebeat-ds-jc6cs 0/1 Terminating 1 1d filebeat-ds-jc6cs 0/1 Terminating 1 1d filebeat-ds-dlqxm 0/1 Pending 0 0s filebeat-ds-dlqxm 0/1 ContainerCreating 0 1s filebeat-ds-dlqxm 1/1 Running 0 25s [root@master manifests]# kubectl explain pods.spec