k8s

官网

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

查看所有 namespace 中所有的 Container

坚持原创技术分享,您的支持将鼓励我继续创作!