模拟k8s项目的生命周期
文章目录模拟k8sngin项目生命周期k8s项目创建资源发布nginx服务提供负载均衡功能为什么可以访问nginx?查看proxy负载均衡端口更新nginx为1.14版本回滚nginx删除nginx项目模拟k8sngin项目生命周期项目的生命周期,创建–》发布–》更新–》回滚–》删除了解pod类型portport是k8s集群内部访问service的端口,即通过clusterIP: port可以访问
文章目录
模拟k8sngin项目生命周期
项目的生命周期,创建–》发布–》更新–》回滚–》删除
了解pod类型
- port
port是k8s集群内部访问service的端口,即通过clusterIP: port可以访问到某个service
- nodePort
nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。
- targetPort
targetPort是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
- containerPort
containerPort是pod内部容器的端口,targetPort映射到containerPort。
k8s群集提供外部服务图
负载均衡功能
Kubectl是管理k8s集群的命令行工具
[root@localhost bin]# kubectl --help
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
Basic Commands (Beginner):
create Create a resource from a file or from stdin.
expose 使用 replication controller, service, deployment 或者 pod
并暴露它作为一个 新的 Kubernetes Service
run 在集群中运行一个指定的镜像
set 为 objects 设置一个指定的特征
Basic Commands (Intermediate):
explain 查看资源的文档
get 显示一个或更多 resources
edit 在服务器上编辑一个资源
delete Delete resources by filenames, stdin, resources and names, or by resources and
label selector
Deploy Commands:
rollout Manage the rollout of a resource
scale 为 Deployment, ReplicaSet, Replication Controller 或者 Job
设置一个新的副本数量
autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController
的副本数量
Cluster Management Commands:
certificate 修改 certificate 资源.
cluster-info 显示集群信息
top Display Resource (CPU/Memory/Storage) usage.
cordon 标记 node 为 unschedulable
uncordon 标记 node 为 schedulable
drain Drain node in preparation for maintenance
taint 更新一个或者多个 node 上的 taints
Troubleshooting and Debugging Commands:
describe 显示一个指定 resource 或者 group 的 resources 详情
logs 输出容器在 pod 中的日志
attach Attach 到一个运行中的 container
exec 在一个 container 中执行一个命令
port-forward Forward one or more local ports to a pod
proxy 运行一个 proxy 到 Kubernetes API server
cp 复制 files 和 directories 到 containers 和从容器中复制 files 和
directories.
auth Inspect authorization
k8s项目创建资源
[root@localhost ~]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
image 镜像 replicsa 副本集
查看资源地址
[root@localhost ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-depolyment-5d648c8f47-9k2q9 1/1 Running 0 2m55s 172.17.27.3 192.168.136.30 <none>
nginx-depolyment-5d648c8f47-9p2w4 1/1 Running 0 2m55s 172.17.38.2 192.168.136.40 <none>
nginx-depolyment-5d648c8f47-frqsk 1/1 Running 0 2m55s 172.17.38.3 192.168.136.40 <none>
我们可以去接口看一下
查看所有服务
[root@localhost ~]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/nginx-depolyment-5d648c8f47-9k2q9 1/1 Running 0 13m
pod/nginx-depolyment-5d648c8f47-9p2w4 1/1 Running 0 13m
pod/nginx-depolyment-5d648c8f47-frqsk 1/1 Running 0 13m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-depolyment 3 3 3 3 13m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nginx-depolyment-5d648c8f47 3 3 3 13m
查看是否提供服务(还没有发布服务)
[root@localhost ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h
发布nginx服务提供负载均衡功能
[root@localhost ~]# kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
Deployment为Pod和ReplicaSet提供了一个声明式定义方
查看是否提供服务(有服务可以访问了)
[root@localhost ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h
nginx-service NodePort 10.0.0.176 <none> 80:30967/TCP 23s
网络状态详细信息
[root@localhost ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-7697996758-9hqnk 1/1 Running 0 65m 172.17.38.2 192.168.136.40 <none>
nginx-7697996758-g6pfx 1/1 Running 0 65m 172.17.38.3 192.168.136.40 <none>
nginx-7697996758-z5pht 1/1 Running 0 65m 172.17.27.3 192.168.136.30 <none>
查看资源对象简写
[root@localhost bin]# kubectl api-resources
查看关联后端的节点
[root@localhost ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.136.60:6443,192.168.136.88:6443 23h
nginx-service 172.17.27.3:80,172.17.38.2:80,172.17.38.3:80 61m
为什么可以访问nginx?
创建过程
- kubelet取代了master执行任务创建资源
- port是k8s集群内部访问service的端口,targetPort是pod的端口都是80
- 通过kube-proxy,实现流量从service到pod的转发
- nodePort是外部访问k8s集群中service的端口
查看proxy负载均衡端口
kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引入了ipvs模式
在node01操作 同样安装ipvsadmin工具查看
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# ipvsadm -L -n
TCP 192.168.136.40:30001 rr
-> 172.17.27.2:8443 Masq 1 0 0
TCP 192.168.136.40:30967 rr
-> 172.17.27.3:80 Masq 1 0 0
-> 172.17.38.2:80 Masq 1 0 0
-> 172.17.38.3:80 Masq 1 0 0
在node02操作 同样安装ipvsadmin工具查看
[root@localhost ~]# yum install ipvsadm -y
[root@localhost ~]# ipvsadm -L -n
TCP 192.168.136.30:30967 rr
-> 172.17.27.3:80 Masq 1 0 0
-> 172.17.38.2:80 Masq 1 0 0
-> 172.17.38.3:80 Masq 1 0 0
访问地址
[root@localhost bin]# kubectl logs nginx-7697996758-9hqnk
更新nginx为1.14版本
查看版本号
查看版本号
更新命令
我们可以看帮助信息
[root@localhost bin]# kubectl set --help
]Configure application resources
These commands help you make changes to existing application resources.
Available Commands:
env Update environment variables on a pod template
image 更新一个 pod template 的镜像
resources 在对象的 pod templates 上更新资源的 requests/limits
selector 设置 resource 的 selector
serviceaccount Update ServiceAccount of a resource
subject Update User, Group or ServiceAccount in a
RoleBinding/ClusterRoleBinding
Usage:
kubectl set SUBCOMMAND [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all
commands).
获取修改模板
[root@localhost bin]# kubectl set image --help
Examples:
# Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox
container image to 'busybox'.
kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1
找到更新命令开始更新为1.14
[root@localhost bin]# kubectl set image deployment/nginx nginx=nginx:1.14
deployment.extensions/nginx image updated
处于动态监听状态
[root@localhost ~]# kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-6ff7c89c7c-2hxbj 0/1 ContainerCreating 0 5s 创建
nginx-7697996758-9hqnk 1/1 Running 0 95m
nginx-7697996758-g6pfx 1/1 Running 0 95m
nginx-7697996758-z5pht 1/1 Running 0 95m
nginx-6ff7c89c7c-2hxbj 1/1 Running 0 38s
nginx-7697996758-g6pfx 1/1 Terminating 0 96m 删除
nginx-6ff7c89c7c-n9kwl 0/1 Pending 0 0s
nginx-6ff7c89c7c-n9kwl 0/1 Pending 0 1s
nginx-6ff7c89c7c-n9kwl 0/1 ContainerCreating 0 1s 创建
nginx-7697996758-g6pfx 0/1 Terminating 0 96m 删除
nginx-7697996758-g6pfx 0/1 Terminating 0 96m
nginx-7697996758-g6pfx 0/1 Terminating 0 96m
nginx-6ff7c89c7c-n9kwl 1/1 Running 0 23s
nginx-7697996758-9hqnk 1/1 Terminating 0 96m
nginx-6ff7c89c7c-7wmwv 0/1 Pending 0 0s
nginx-6ff7c89c7c-7wmwv 0/1 Pending 0 0s
nginx-6ff7c89c7c-7wmwv 0/1 ContainerCreating 0 0s
nginx-7697996758-9hqnk 0/1 Terminating 0 96m
nginx-7697996758-9hqnk 0/1 Terminating 0 96m
nginx-7697996758-9hqnk 0/1 Terminating 0 96m
nginx-7697996758-9hqnk 0/1 Terminating 0 96m
nginx-6ff7c89c7c-7wmwv 1/1 Running 0 18s
nginx-7697996758-z5pht 1/1 Terminating 0 96m
nginx-7697996758-z5pht 0/1 Terminating 0 96m
nginx-7697996758-z5pht 0/1 Terminating 0 97m
nginx-7697996758-z5pht 0/1 Terminating 0 97m
这里规律是先创建在删除
刷新查看是否更新成功
回滚nginx
查看命令帮助
[root@localhost bin]# kubectl rollout --help
Manage the rollout of a resource.
Valid resource types include:
\* deployments
\* daemonsets
\* statefulsets
Examples:
\# Rollback to the previous deployment
kubectl rollout undo deployment/abc
\# Check the rollout status of a daemonset
kubectl rollout status daemonset/foo
Available Commands:
history 显示 rollout 历史
pause 标记提供的 resource 为中止状态
resume 继续一个停止的 resource
status 显示 rollout 的状态
undo 撤销上一次的 rollout
Usage:
kubectl rollout SUBCOMMAND [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all
commands).
查看历史版本
[root@localhost ~]# kubectl rollout history deployment/nginx
deployment.extensions/nginx
REVISION CHANGE-CAUSE
1 <none>
2 <none>
执行回滚
[root@localhost bin]# kubectl rollout undo deployment/nginx
deployment.extensions/nginx
检查回滚状态
[root@localhost bin]# kubectl rollout status deployment/nginx
deployment "nginx" successfully rolled out
处于动态监听状态
[root@localhost ~]# kubectl get pods -w
还是先创建在删除
删除nginx项目
查看deployment
[root@localhost ~]# kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 3 3 3 3 117m
删除nginx
[root@localhost ~]# kubectl delete deployment/nginx
deployment.extensions "nginx" deleted
查看服务SVC
[root@localhost ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 24h
nginx-service NodePort 10.0.0.176 <none> 80:30967/TCP 117m
删除服务SVC
[root@localhost ~]# kubectl delete svc/nginx-service
service "nginx-service" deleted
查看已经删除
[root@localhost ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 24h
查看具体资源的详细信息
[root@localhost bin]# kubectl run nginx --image=nginx:latest --port=80 --replicas=3
kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
deployment.apps/nginx created
查看服务
[root@localhost bin]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-7697996758-2ph6x 0/1 ContainerCreating 0 13s
nginx-7697996758-jfngb 0/1 ContainerCreating 0 13s
nginx-7697996758-w4z29 0/1 ContainerCreating 0 13s
查看nginx具体资源
[root@localhost ~]# kubectl describe pod nginx-7697996758-2ph6x
Name: nginx-7697996758-2ph6x
Namespace: default
Priority: 0
PriorityClassName: <none>
Node: 192.168.136.40/192.168.136.40
Start Time: Sat, 10 Oct 2020 00:35:12 +0800
Labels: pod-template-hash=7697996758
run=nginx
Annotations: <none>
Status: Running
IP: 172.17.38.3
Controlled By: ReplicaSet/nginx-7697996758
Containers:
nginx:
Container ID: docker://a7d0945872e9b9d71be44a8376df6d300384ad92fcf84b4852a90f1e831b4580
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Sat, 10 Oct 2020 00:35:34 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-w6xph (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-w6xph:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-w6xph
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 34s default-scheduler Successfully assigned default/nginx-7697996758-2ph6x to 192.168.136.40
Normal Pulling 30s kubelet, 192.168.136.40 pulling image "nginx:latest"
Normal Pulled 13s kubelet, 192.168.136.40 Successfully pulled image "nginx:latest"
Normal Created 13s kubelet, 192.168.136.40 Created container
Normal Started 12s kubelet, 192.168.136.40 Started container
查看deployment资源
[root@localhost bin]# kubectl describe deployment/nginx
进入pod
[root@localhost ~]# kubectl exec -it nginx-7697996758-2ph6x bash
root@nginx-7697996758-2ph6x:/# ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
boot docker-entrypoint.d etc lib media opt root sbin sys usr
更多推荐
所有评论(0)