一、简介

1.谈到docker容器编排,首先是docker官方的Docker Swarm,属于轻量级的容器编排工具,kubernetes是由google发起的项目,适用于大规模、复杂的容器集群。

2.架构和功能组件

创建Pod的流程:kubectl ---> api server ---> ectd ---> scheduler ---> ectd ----> kubelet --->pod

kubernetes简介与常用命令_Deployment

管理节点master组件:

etcd:k8s 的数据库,存储着系统所有对象信息,如node、pods、service、网络等信息。

api server: 以RESTful api接口方式提供服务来管理整个平台,集群内所有组件之间数据交换的枢纽和协调者,提供认证、授权、访问控制保证集群的安全,pods/replication/service增删改查都是它处理,处理后数据存储在etcd;

scheduler:对系统资源进调度,根据调度策略将待调度的pod调度到可用的node上,调度后数据存储在etcd;

controller-manager:系统的控制管理中心,共有8个controller,分别通过api-server控制系统内的资源对象,如命名空间、节点、副本、服务和资源等;

子节点node组件:

kubelet:处理scheduler产生的调度任务,通过api-server来获取到etcd中的调度信息,来管理pod和pod中容器的生命周期和卷等信息,如下载镜像并在pod中创建启动一个容器,容器销毁等,

kube-proxy:为外部service提供内部的服务发现,反向代理和负载均衡;

pod:k8s最小调度的单元,一个pod中包含一个或多个container;

container:运行中的镜像;

二、其他名字解释

service:service是Kubernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源,通过iptables的nat转发来实现,转发的目标端口为Kube_proxy生成的随机端口。则定义真实对外提供的服务,一个 service 会对应后端运行的多个 container

labels标签:labels是用于区分Pod、Service、ReplicationController的key/value键值对,仅使用在Pod、Service、ReplicationController之间的关系识别,但对这些单元本身迚行操作时得使用name标签。

deployment:KubernetesDeployment用于更新Pod和ReplicaSet(下一代的ReplicationController)的方法,你可以在Deployment对象中只描述你所期望的理想状态(预期的运行状态),deployment控制器会将现在的实际状态转换成期望的状态。通过Deployment可以用来创建新的资源。deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。

三、常用命令

创建更新缩放更新资源
kubectl create -f ./my-deployment.yaml
kubectl apply -f ./my-deployment.yaml
kubectl scale --replicas=3 deployment/my-deployment
kubectl autoscale rc rc-name --min=1 --max=5
kubectl set image deployment/my-deployment my-container=my-image:my-tag
kubectl run nginx --image=nginx  --replicas=3
kubectl exec -it name /bin/bash

资源查看描述
kubectl get nodes
kubectl get pods
kubectl get pods -o wide
kubectl get pods --all-namespaces
kubectl get pods -o wide -all-namespaces
kubectl get pods --selector name=redis
kubectl get deployment my-dep  
kubectl get svc
kubectl get ns
kubectl get rc
kubectl get services
kubectl get events --all-namespaces
kubectl get events -n kube-system
kubectl get svc --all-namespaces
kubectl get endpoint  
kubectl describe nodes my-node
kubectl describe pods my-pod
kubectl describe svc my-service

删除资源
kubectl delete pod my-pod
kubectl delete pods --all
kubectl delete svc my-service
kubectl delete -f my-deployment.yaml

查看系统集群
kubectl version
kubectl api-versions
kubectl api-resources
kubectl get cs
kubectl cluster-info
kubectl cluster-info dump

查看资源使用
kubectl top pod  
kubectl top nodes

编辑拷贝
kubectl edit  
kubectl edit deployment nginx
kubectl edit services/nginx
kubectl cp

日志查看
kubectl logs  
kubectl logs -f  
kubectl logs --tail=10 redis
kubectl attach name