Kubernetes学习笔记三:NameSpace和Pod管理
NameSpace和Pod的一些学习笔记
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
更多推荐
所有评论(0)