0.kubectl使用

vim /etc/profile 进入配置文件,定义别名=原命令操作
source /etc/profile 使配置文件生效
kubectl命令补全工具 bash-completion
在这里插入图片描述
在这里插入图片描述

1.NameSpace管理
(1)查看全部命名空间

kubectl get namespaces
在这里插入图片描述

(2) 创建新的命名空间

kubectl create namespace test20220130
在这里插入图片描述

(3)查看kubeconfig配置文件信息

kubectl config view
在这里插入图片描述

(5)查询当前配置的上下文信息

kubectl config current-context
在这里插入图片描述

(6)修改默认的命名空间为kube-system

kubectl config set-context --current --namespace=kube-system
在这里插入图片描述

2.Pod管理
(1)使用命令创建Pod

kubectl run nginx2 --image=nginx:1.9
Pod名称是nginx2,使用的镜像是版本1.9的nginx。
在这里插入图片描述

(2)查看Pod的状态

kubectl get pods
查询pod的状态,发现一直是Pending状态。
在这里插入图片描述

(3)查看pod的详细信息

kubectl describe pod nginx2

发现一个异常信息:1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn’t tolerate.

参考:0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t
在这里插入图片描述

(4)查询Node污点标记

kubectl describe node izwz903eefgw1nuwzx28cdz | grep Taint
master默认被设置为不可调度的。
在这里插入图片描述

(5)添加和取消Node的污点标记

kubectl taint node izwz903eefgw1nuwzx28cdz node-role.kubernetes.io/master:NoSchedule-
将node标记为可以调度的(在污点后面加一个减号就是取消标记)。

再次查看Pod的状态和详细信息,变成Running状态了。
在这里插入图片描述
再次查看Pod详细信息,创建Pod成功。
在这里插入图片描述
添加污点
kubectl taint nodes node1 key1=value1:NoSchedule

添加容忍度:

spec:
  tolerations:
  - key: "example-key"
    operator: "Exists"
    effect: "NoSchedule"
(6)对使用的资源进行限额
(6.1)设置limit和requests

创建qos-demo.yaml文件,设置limits和requests。使用yaml文件的方式创建一个Pod:
kubectl apply -f qos-demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo
spec:
  containers:
  - name: qos-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "100Mi"
        cpu: "300m"
      requests:
        memory: "100Mi"
        cpu: "300m"

查看Pod的详细信息:kubectl describe pod qos-demo

对应的Qos Class是Guaranteed。
在这里插入图片描述

(6.2)只设置requests

创建qos-demo-2.yaml

kubectl apply -f qos-demo-2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: qos-demo-2
spec:
  containers:
  - name: qos-demo-ctr-2
    image: nginx
    resources:
      requests:
        memory: "100Mi"
        cpu: "300m"

kubectl describe pod qos-demo-2

对应的Qos Class是Guaranteed。
在这里插入图片描述

(6.3)不设置requests和limit

创建nginx.yaml文件

kubectl apply -f nginx.yaml

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx:1.9
    name: nginx
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

kubectl describe pod nginx

对应的Qos Class是BestEffort。
在这里插入图片描述

(7)查看组件的状态

kubectl get cs
在这里插入图片描述

(8)kubernetes自动应用/etc/kubernetes/manifests下的yaml文件

在/etc/kubernetes/manifests文件夹下建立static-web.yaml文件。

docker会自动把这个pod启动。如果想要删除这个Pod,则直接把文件删除。
watch -n 1 kubectl get pods 每隔1s监控pod的变化情况。
kubectl get pod -w 监控pod的变化

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    name: static-web
spec:
  containers:
  - name: static-web
    image: nginx
    ports:
    - name: web
      containerPort: 80

在这里插入图片描述
在这里插入图片描述

(9)父子容器

initContainer:用于在主容器启动前执行初始化工作。
在Kubernetes官网上有一个例子,需要等到init-myservice和init-mydb两个子容器完成后,才会创建myapp-container。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
(10)指定Node节点创建Pod

需要将Pod启动到带有disktype=ssd标签的节点上。

apiVersion: v1
kind: Pod
metadata:
  name: nginx-ssd
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

找不到带有disktype=ssd标签的节点,Pod无法创建一直处于Pending状态。
在这里插入图片描述
查看Pod创建的详细信息。
在这里插入图片描述
kubectl label node iZwz903eefgw1nuwzx28cdZ distype=ssd
给节点添加标签

kubectl get nodes --show-labels
查看Node的标签信息
在这里插入图片描述
有了符合条件的Node,会自动创建Pod,不需要重启。
在这里插入图片描述

(11)查询属性描述

kubectl explain pod.spec.containers.imagePullPolicy
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐