k8s学习笔记——基础知识
1、关于svc中ClusterIP的API格式https://localhost:6443/api/v1/namespaces/$ns/services/$svc前提是token具有相应访问权限//获取token=$(kubectl describe secret $(kubectl get secret -n kube-system |grep default |awk '{print $1}'
1、关于svc中ClusterIP的API格式
https://localhost:6443/api/v1/namespaces/$ns/services/$svc
前提是token具有相应访问权限
//获取
token=$(kubectl describe secret $(kubectl get secret -n kube-system |grep default |awk '{print $1}') -n kube-system |grep -E '^token' |cut -f2 -d':'|tr -d '\t'|tr -d ' ')红色部分是要筛选的账户关键字
curl -k -v -X GET -H "Authorization: Bearer $token" -H "Content-Type: application/json" https://localhost:6443/api/v1 --insecure
在kubectl edit svc里有
selfLink: /api/v1/namespaces/default/services/nginx
selfLink属性就是ClusterIP访问的url
2、service的三种端口
port
service暴露在cluster ip上的端口,:port 是提供给集群内部客户访问service的入口。
nodePort
nodePort是k8s提供给集群外部客户访问service入口的一种方式,:nodePort 是提供给集群外部客户访问service的入口。
targetPort
targetPort是pod上的端口,从port和nodePort上到来的数据最终经过kube-proxy流入到后端pod的targetPort上进入容器。
3、设置当前上下文
kubectl config current-context
kubectl config set-context <current-context> --namespace test
//接下来再去执行命令默认的namespace就是test了
4、pod 状态Terminating 删除不了
//参考解决k8s 中Terminating状态的Pod删不掉的问题_安冉-CSDN博客
(1)无论各种方式生成的 pod, 均可以使用如下命令强制删除:
1 |
|
(2)因此对于上面的 pod,我们只要执行如下命令即可删除:
1 |
|
5、StorageClass的ReclaimPolicy
//参考StorageClass的ReclaimPolicy · 大专栏
容器本身是无状态的,出现问题后随时可销毁,但保存数据的的卷不能被销毁,需要创建一个持久卷。持久卷删除时有三种回售模式,
保持(Retain):删除PV后后端存储上的数据仍然存在,如需彻底删除则需要手动删除后端存储volume
删除(Delete):删除被PVC释放的PV和后端存储volume
回收(Recycle):保留PV,但清空PV上的数据(已废弃)
6、无法删除namespace 提示 Terminating
//参考kubernetes无法删除namespace 提示 Terminating_惊云-CSDN博客
7、Ceph rbd删除image遭遇watchers异常处理
//参考Ceph rbd删除image遭遇watchers异常处理 - lswweb - 博客园
8、查看集群信息
kubectl cluster-info
9、查看docker 网络
docker network ls
//删除网络
docker network rm id号
10、打污点命令
//参考K8s中污点(Taint)详解及命令 - 云+社区 - 腾讯云
11、将pod部署到指定节点上
nodeSelector: //使用标签标定,在node节点上打上标签,如下设置与node节点相同的标签即可
traefik: "true"
//使用指定hostname或ip确定部署的节点
nodeName: keepalived_vri
12、pod中image拉取策略
imagePullPolicy: IfNotPresent // Always 、 Never
13、docker中停止的容器再次运行
sudo docker start 容器号
14、私有docker仓库下载镜像需要secret
//docker pull 镜像需要secret 创建
kubectl create secret docker-registry SECRET_NAME --namespace=NAME_SPACE \ --docker-server=DOCKER_REGISTRY_SERVER
--docker-username=DOCKER_USER \ --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL
15、使用helm查看项目配置信息
helm inspect values gitlab/gitlab //gitlab是项目名称
16、docker 镜像下载到本地并恢复
17、获取部署信息go-template
例如:kubectl get deploy tomcat-deploy -o go-template='{{.status.readyReplicas}}'
输出deploy文件的status下 readyReplicas的值
18、设置用户权限访问空间
kubectl config set-context ctx-dev \
--cluster=kubernetes \
--user=admin \
--namespace=dev \
--kubeconfig=/root/.kube/config
//设置上下文
kubectl config use-context ctx-dev --kubeconfig=/root/.kube/config
19、多维度集群资源管理
//limits
apiVersion: v1
kind: LimitRange
metadata:
name: test-limits
spec:
limits:
max:
cpu: 4000m
memory: 2Gi
min:
cpu: 100m
memory: 100Mi
maxLimitRequestRatio: #max同limit最大比值
cpu: 3
memory: 2
type: Pod
default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: 2000m
memory: 1Gi
min:
cpu: 100m
memory: 100Mi
maxLimitRequestRatio:
cpu: 5
memory: 4
type: Container
//compute-resource
apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-quota
#限制硬件资源占用量,可以下面的ResourceQuota合并为一个文件
spec:
hard:
pods: 4
requests.cpu: 2000m
requests.memory: 4Gi
limits.cpu: 4000m
limits.memory: 8Gi
//resource-quota
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
#限制资源数量,可以加上namespace
spec:
hard:
configmaps: 10
persistentvolumeclaims: 4
replicationcontrollers: 20
secrets: 10
services: 10
//pod驱逐
//常见驱逐策略配置
#当内存剩余持续1m30s小于1.5G开启驱逐
--eviction-soft=memory.available<1.5Gi
--eviction-soft-grace-period=memory.available=1m30s
#当下列条件有满足就开始驱逐(内存小于100M或硬盘小于1G,剩余nodei节点小于5%)
--eviction-hard=memory.available<100Mi,
nodefs.available<1Gi,nodefs.inodesFree<5%
20、健康检查 (containers中的 livenessProbe \ readinessProbe \ startupProbe 探针的httpGet \ tcpSocket \ exec三种用法)
参考//配置存活、就绪和启动探测器 | Kubernetes
21、deploy部署添加hosts
apiVersion: apps/v1
kind: Deployment
metadata:
name: geowebcache
namespace: default
spec:
replicas: 1
selector:
name: geowebcache
template:
metadata:
labels:
name: geowebcache
spec:
hostAliases:
- ip: 10.12.70.130
hostnames:
- "geoserver.shell.com"
containers:
- name: geowebcache
image: core.harbor.shell.com:30934/library/geowebcache:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
22、deploy 动态扩容
kubectl scale deploy geowebcache --replicas 10
23、ceph clock skew detected on mon
ceph clock skew detected on mon_mixboot-CSDN博客
24、StatefulSet和Deployment的区别 (转载)
“Deployment用于部署无状态服务,StatefulSet用来部署有状态服务”
25、clusterIP service内部访问——Headless Service
26、 k8s master certs 过期
//参考 使用 kubeadm 进行证书管理 | Kubernetes
//会报类似错误
shell811127@k8s70133:~$ kubectl get node
Unable to connect to the server: x509: certificate has expired or is not yet valid: current time 2022-03-19T09:38:18+08:00 is after 2022-03-19T01:07:18Z
//更新方法
kubeadm certs renew all
sudo docker ps | grep -v pause | grep -E "etcd|scheduler|controller|apiserver" | awk '{print $1}' | awk '{print "sudo docker","restart",$1}' | bash
sudo cp -i /etc/kubernetes/admin.conf /root/.kube/config
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
这里要注意所有master节点都要更新完在测试,不然会报以下类似错误
shell811127@k8s70133:~$ kubectl get node
Error from server (InternalError): an error on the server ("") has prevented the request from succeeding
27、测试自己打包的镜像
kubectl run "name" --image="自己打包的镜像名" --port=XXX --env=XXX -n XXX等同docker run XXX
28、重启pod(使用deployment部署的)
kubectl rollout restart deployment deploy_name -n ns_name
启动成功后可以删除replicaset资源(状态都是0)
29、实时查看日志
kubectl logs -f etcd-kmaster1 -n kube-system
kubectl logs --tail 200 -f kube-apiserver -n kube-system #查看最后200行的日志
kubectl logs -l app=frontend # 返回所有标记为 app=frontend 的 pod 的合并日志。
kubectl logs --since=1h nginx#查看名称为nginx这个pod最近一小时的日志
30、为ubuntu:latest镜像添加时区
如何在ubuntu docker镜像上安装tzdata_StoneLiu999的博客-CSDN博客
31、卸载不掉pv
kubernetes无法删除pv - haoprogrammer - 博客园
32、检查镜像是否可用,临时启动
kubectl run ubuntu-test --image=core.harbor.shell.com:32042/library/busyboxtools:v1 --command -- sleep 3600
33、ceph osd down处理
ceph集群osd down 故障处理_Rocky000000的博客-CSDN博客
34、docker pull 408错误
更多推荐
所有评论(0)