官网
https://github.com/kubernetes/kubernetes
https://github.com/kubernetes/minikube
http://docs.kubernetes.org.cn/475.html
安装minikube
https://github.com/kubernetes/minikube
查看版本号
kubectl version
启动minikube
minikube start
查看集群信息
kubectl cluster-info
查看集群下的所有节点
kubectl get nodes
错误:
The connection to the server 192.168.99.100:8443 was refused - did you specify the right host or port?
先启动:minikube start
创建一个节点
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
查看节点
kubectl get deployments
启动应用?
kubectl proxy
环境变量设置POD_NAME
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
获取所有的pod信息
kubectl get pods
kubectl get services
查看pod的详情信息
kubectl describe pods
kubectl describe services
kubectl describe deployment
查看pod的日志
kubectl logs $POD_NAME
pod中执行命令
kubectl exec $POD_NAME env
进入pod
kubectl exec -it $POD_NAME bash
发布对外提供服务的service
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
查看服务详细信息
kubectl describe services/kubernetes-bootcamp
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo $NODE_PORT
curl $(minikube ip):$NODE_PORT
生成pod的yaml文件
kubectl get pod web01 -o yaml
给pod打标签
通过标签,查看指定的pods
kubectl get pods -l run=kubernetes-bootcamp
kubectl get service -l run=kubernetes-bootcamp
pod的name写入环境变量
export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
打新标签
kubectl label pod $POD_NAME app=v1
查看标签是否生效
kubectl describe pods $POD_NAME
用新标签获取信息
kubectl get pods -l app=v1
通过标签删除service
kubectl delete services -l run=kubernetes-bootcamp
扩展应用程序
查看deployments
kubectl get deployments
扩展4个deployment
kubectl scale deployments/kubernetes-bootcamp --replicas=4
验证
kubectl get deployments
查看pod
kubectl get pods -o wide
查看所有的命名空间下的pods
kubectl get pods --all-namespaces
查看deployment日志
kubectl describe deployments/kubernetes-bootcamp
Load Balancing
查看ip信息
kubectl describe services/kubernetes-bootcamp
端口信息写入环境变量
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
查看是否Load Balancing
curl $(minikube ip):$NODE_PORT
滚动更新
查看pod信息(主要看Image选项)
kubectl describe pods
设置image为新版本
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
查看pod信息(已使用新的image)
kubectl describe pods
请求应用,看是否都更新完成
kubectl describe services/kubernetes-bootcamp
export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
curl $(minikube ip):$NODE_PORT
通过命令确认
kubectl rollout status deployments/kubernetes-bootcamp
回滚更新
更新错误版本
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
查看deployments
kubectl get deployments
查看pod状态(ErrImagePull)
kubectl get pods
查看详情(image不对,但是还是这个images地址)
kubectl describe pods
回滚更新
kubectl rollout undo deployments/kubernetes-bootcamp
查看pod状态(Running)
kubectl get pods
查看pod版本(v2)
kubectl describe pods
deployments操作
通过文件创建deployments
kubectl apply -f ngnix_deployment.yaml
nginx_deployment.yaml内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
列出deployment创建的pod
kubectl get pods -l app=nginx
查出指定pod信息
kubectl describe pod <pod_name>
删除deployment
kubectl delete deployment nginx-deployment
service进行负载均衡
创建deployments
kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
查看deployments信息
kubectl get deployments hello-world
kubectl describe deployments hello-world
显示ReplicaSet信息
kubectl get replicasets
kubectl describe replicasets
创建暴露deployments的service
kubectl expose deployment hello-world --type=NodePort --name=example-service
列出运行Hello World应用程序的pod
kubectl get pods --selector="run=load-balancer-example" --output=wide
查看公网ip
export NODE_PORT=$(kubectl get services/example-service -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
curl $(minikube ip):$NODE_PORT
查看集群中所有的Container
方法一
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
方法二
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"
方法三
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
方法五
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx
方法六
kubectl get pods --namespace kube-system -o jsonpath="{..image}"
方法七
kubectl get pods --all-namespaces -o go-template --template="{{range .items}}{{range .spec.containers}}{{.image}} {{end}}{{end}}"
pod启动失败
查看pod详情信息
kubectl describe pod/{name}
查看pod日志
kubectl logs pod/{name}
pod拉取镜像失败(我是使用的mac的minikube)
登录虚拟机
「minikube是利用virtual box启动了一个虚拟机」
minikube ssh
拉取镜像
docker pull {image_name}
node隔离与恢复
将node脱离k8s集群的调度范围
修改yaml,添加unschedulable属性
node.yaml
...
spec:
unschedulable:true
...
kubectl replace -f node.yaml
使用命令
kubectl patch node {node_name} -p '{"spec":{unschedulable":true}}'
或者
kubectl cordon {node_name}
将node恢复调度
其余两种方式将unschedulable属性改为false即可
kubectl uncordon {node_name}
更新资源对象的Label
添加标签
kubectl label pod {pod_name} role=test
查看pod的label
kubectl get pods -Lrole
删除一个Label
kubectl label pod {pod_name} role-
覆盖修改
kubectl label pod {pod_name} role=test --overwrite
context定义
定义两个context,即运行环境,这个运行环境属于某个特定的命名空间
kubectl config set-context ctx-dev --namespace=development --cluster=kubernets-cluster --user=dev
kubectl config set-context ctx-prod --namespace=production --cluster=kubernets-cluster --user=prod
查看已定义的context
kubectl config view
设定工作组在特定context环境中工作
kubectl config use-context ctx-dev