minikube 基础操作1

0 目录

1 基本概念(cluster,minikune)

2 一些概念(pod,eployment等)

3 常用命令

4 expose app

5 使用label

6 scale

20 问题

1 基本概念

1.1 架构

cluster指集群的意思,翻译过来就是你这套部署了kubernete的环境

minikube 基础操作1_第1张图片

图片链接 Using Minikube to Create a Cluster | Kubernetes

1.2 启动minikube

minikube start

1.3 查看minikube 和minikube client server版本

kubectl version

 1.4 查看cluster有哪些组件,和组件信息

kubelctl cluster-info

2 一些概念

2.1 创建deployment

创建deployment后,会有个deployment controller管理创建的deployment,创建deployment后,deployment coltroller会持续监控创建的deployment。比如当主机删除导致instance(注意是instance而不是pod,管理对象不同)删减时,deployment coltroller会检测到并重新schedule一个node,保持instance数量符合设定值。deployment的创建需要指定镜像。

minikube 基础操作1_第2张图片

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

创建完可以用kubectl get pods 或 kubectl get deployment查看创建结果

2.2 pods

pod内的容器共享resource(volume、网络(如ip地址,port)等),也就是说,对外界来说,pod是最小操作单元,因为ip独立,pod再往里是container,container ip都一样外部难以操作,pod内部应该有管理container的机制,但对外,pod一般是最小操作单元

3 常用命令

3.1 kubectl proxy

执行后会在本地创建kubernete master代理服务器,就可以在本地curl通pod了

 curl要按照api格式去curl,不是直接ip加端口

minikube 基础操作1_第3张图片

3.2 kubectl logs pod_name

看pod的log,刚才访问了一次,日志应该可以看到

3.3 其他命令

kubectl describe xxx  查看xxx详情

kubectl exec -it xxx  进入xxx,如容器(pod为单容器pod,xxx可直接为pod name,否则的情况还没学到),-i指interactive,-t指allocate pseudo-tty,创建伪终端

4 expose app

4.1 expose概念与如何expose

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

将deployment的8080端口对外开放,如何查询对外开放端口是多少?

kubectl describe services/kubernetes-bootcamp

minikube 基础操作1_第4张图片

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,放一张官网图方便理解

minikube 基础操作1_第5张图片

kubectl delete services -l app=kubernetes-bootcamp

删了以后再从外部curl就curl不通了,按上述命令试下即可

4.2 expose类型

一般有四种,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

4.3 curl的方式

目前发现三种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

 5 使用label

查看deployment的label

kubectl describe deployments

minikube 基础操作1_第6张图片

 使用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 scale

6.1 直接修改deployment规格,比如增加replica数量

minikube 基础操作1_第7张图片

6.2 更新镜像版本,会触发rollingupdate

更新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

6.3 rollingupdate如何回退?或者因操作失误需要回退rollingupdate操作

kubectl rollout undo deployments/kubernetes-bootcamp

20 问题

deployment,pod,replicaset,replication controller关系

你可能感兴趣的:(k8s,学习)