跳至主要內容

高效技巧-kubectl

知识库容器技术kubernetes建设kubernetes建设小于 1 分钟

k 命令

是否有过因为使用 kubectl 经常需要重复输入命名空间而苦恼?


function k() {
 cmdline=$(HISTTIMEFORMAT="" history | awk '$2 == "kubectl" && (/-n/ || /--namespace/) {for(i=2;i<=NF;i++)printf("%s ",$i);print ""}' | tail -n 1)
 regs=('\-n [\w\-\d]+' '\-n=[\w\-\d]+' '\-\-namespace [\w\-\d]+' '\-\-namespace=[\w\-\d]+')
 for i in "${!regs[@]}"; do
  reg=${regs[i]}
  nsarg=$(echo $cmdline | grep -o -P "$reg")
  if [[ "$nsarg" == "" ]]; then
   continue
  fi
  cmd="kubectl $nsarg $@"
  echo "$cmd"
  $cmd
  return
 done
 cmd="kubectl $@"
 echo "$cmd"
 $cmd
}
## 将上述脚本粘贴到当前shell(注册k命令到当前终端session):
## 将 k 当作 kubectl 来用,只是不需要输入命名空间,它会调用 kubectl 并自动加上上次使用的非默认的命名空间,
## 如果想切换命名空间,再常规的使用一次 kubectl 就行,

nginx 测试服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
    labels:
      app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: ClusterIP
  ports:
  - port: 80
    protocol: TCP
    name: http
  selector:
    app: nginx

实用命令与脚本

获取集群所有节点占用的 podCIDR

kubectl get node -o jsonpath='{range .items[*]}{@.spec.podCIDR}{"\n"}{end}'
# 10.233.64.0/24
# 10.233.65.0/24
# 10.233.66.0/24