1 基本概念(cluster,minikune)
2 一些概念(pod,eployment等)
3 常用命令
4 expose app
5 使用label
6 scale
20 问题
cluster指集群的意思,翻译过来就是你这套部署了kubernete的环境
图片链接 Using Minikube to Create a Cluster | Kubernetes
minikube start
kubectl version
1.4 查看cluster有哪些组件,和组件信息
kubelctl cluster-info
创建deployment后,会有个deployment controller管理创建的deployment,创建deployment后,deployment coltroller会持续监控创建的deployment。比如当主机删除导致instance(注意是instance而不是pod,管理对象不同)删减时,deployment coltroller会检测到并重新schedule一个node,保持instance数量符合设定值。deployment的创建需要指定镜像。
kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
创建完可以用kubectl get pods 或 kubectl get deployment查看创建结果
pod内的容器共享resource(volume、网络(如ip地址,port)等),也就是说,对外界来说,pod是最小操作单元,因为ip独立,pod再往里是container,container ip都一样外部难以操作,pod内部应该有管理container的机制,但对外,pod一般是最小操作单元
执行后会在本地创建kubernete master代理服务器,就可以在本地curl通pod了
curl要按照api格式去curl,不是直接ip加端口
看pod的log,刚才访问了一次,日志应该可以看到
kubectl describe xxx 查看xxx详情
kubectl exec -it xxx 进入xxx,如容器(pod为单容器pod,xxx可直接为pod name,否则的情况还没学到),-i指interactive,-t指allocate pseudo-tty,创建伪终端
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
将deployment的8080端口对外开放,如何查询对外开放端口是多少?
kubectl describe services/kubernetes-bootcamp
kubectl get services这两个命令都可以查到
expose完了就可以curl了
curl $(minikube ip):ip
expose后,实际上创建了一个service,service功能是expose pod,就是指提供对外访问pod的方式。pod有自己的独立ip,但没expose时,这个ip外界访问不了,expose就可以访问这个pod ip了。我理解service应该是负责调度pod与对外之间的一些逻辑,如果想删除的话,需要删除services,放一张官网图方便理解
kubectl delete services -l app=kubernetes-bootcamp
删了以后再从外部curl就curl不通了,按上述命令试下即可
一般有四种,clusterip,nodeport,loadbalancer,externalname
clusterip:指将pod内部ip expose,结果就是expose后仅cluster内部可访问这个pod
nodeport:指pod对外expose,pod 访问ip和nod ip相同,pod的访问port为手动输入指定访问port
loadbalancer:没太理解,指在现有云环境创建一个load balancer(负载均衡器),然后给这个service分配一个固定ip,这个ip可以对外访问
externalname:没看明白,externalname好像指域名
注意,expose创建的service如果没有label,service创建时就不会创建endpoint,就不能通过label访问service,但可能通过externalname方式访问service
目前发现三种curl的方式
1 使用kubectl proxy,然后本地curl : curl http://localhost:8001/api/v1/namespaces/default/pods/$pod_name
2 expose后,curl:curl $(minikube ip):$node_port
3 进入容器后,本地curl curl http://localhost:container_port
查看deployment的label
kubectl describe deployments
使用label查询
kubectl get pods -l app=kubernetes-bootcamp
kubectl get services -l app=kubernetes-bootcamp
打label
kubectl label pods $POD_NAME label_name=xxx
6.1 直接修改deployment规格,比如增加replica数量
更新deployment的镜像版本后,比如从v1 -> v2,会触发rollingupdate,会删除原有的pods并且创建新的pods
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
验证的话,可以执行命令curl $(minikube ip):$node_port会发现版本已经升上来了,
也可以执行命令验证:
kubectl rollout deployments/kubernetes-bootcamp
kubectl describe pods
回显的image field会发现版本号变成了v2
kubectl rollout undo deployments/kubernetes-bootcamp
20 问题
deployment,pod,replicaset,replication controller关系