This is my blogs kon|

kongshuo

园龄:4年粉丝:26关注:6

Kubernetes实用操作

配置命令行自动补全

[root@kmaster ~]# vim /etc/profile
source <(kubectl completion bash)
[root@kmaster ~]# source /etc/profile

设置 metrics-server监测节点使用

[root@kmaster ~]# kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created

[root@kmaster ~]# kubectl top node
NAME      CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
kmaster   88m          2%     1959Mi          26%       
knode1    46m          2%     1191Mi          33%       
knode2    39m          1%     1277Mi          36%       

查看切换namespace命名空间

[root@kmaster ~]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
[root@kmaster ~]# kubectl config set-context --current --namespace kube-system
Context "kubernetes-admin@kubernetes" modified.
[root@kmaster ~]# kubectl config get-contexts 
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   kube-system
[root@kmaster ~]# kubectl get pod
NAME                              READY   STATUS             RESTARTS        AGE
coredns-5bbd96d687-7mdwm          1/1     Running            1 (11m ago)     18h
coredns-5bbd96d687-d8dv7          1/1     Running            1 (11m ago)     18h
etcd-kmaster                      1/1     Running            1 (11m ago)     18h
kube-apiserver-kmaster            1/1     Running            1 (11m ago)     18h
kube-controller-manager-kmaster   1/1     Running            1 (11m ago)     18h
kube-proxy-5sf74                  1/1     Running            1 (11m ago)     18h
kube-proxy-6qxvm                  1/1     Running            1 (11m ago)     18h
kube-proxy-z8c7m                  1/1     Running            1 (11m ago)     18h
kube-scheduler-kmaster            1/1     Running            1 (11m ago)     18h
metrics-server-5fc67cc865-qthlr   1/1     Running            2 (7m12s ago)   17h
metrics-server-6f6cdbf67d-hlr5l   0/1     ImagePullBackOff   0               17h

使用shell脚本简化kubectl config

#!/usr/bin/env bash
#
# kubenx(1) is a utility to switch between Kubernetes namespaces.

# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

[[ -n $DEBUG ]] && set -x

set -eou pipefail
IFS=$'\n\t'

KUBENS_DIR="${HOME}/.kube/kubens"

usage() {
  cat <<"EOF"
USAGE:
  kubens                    : list the namespaces in the current context
  kubens <NAME>             : change the active namespace of current context
  kubens -                  : switch to the previous namespace in this context
  kubens -h,--help          : show this message
EOF
  exit 1
}

current_namespace() {
  local cur_ctx
  cur_ctx="$(current_context)"
  ns="$(kubectl config view -o=jsonpath="{.contexts[?(@.name==\"${cur_ctx}\")].context.namespace}")"
  if [[ -z "${ns}" ]]; then
    echo "default"
  else
    echo "${ns}"
  fi
}

current_context() {
  kubectl config view -o=jsonpath='{.current-context}'
}

get_namespaces() {
  kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'
}

escape_context_name() {
  echo "${1//\//-}"
}

namespace_file() {
  local ctx="$(escape_context_name "${1}")"
  echo "${KUBENS_DIR}/${ctx}"
}

read_namespace() {
  local f
  f="$(namespace_file "${1}")"
  [[ -f "${f}" ]] && cat "${f}"
  return 0
}

save_namespace() {
  mkdir -p "${KUBENS_DIR}"
  local f saved
  f="$(namespace_file "${1}")"
  saved="$(read_namespace "${1}")"

  if [[ "${saved}" != "${2}" ]]; then
    printf %s "${2}" > "${f}"
  fi
}

switch_namespace() {
  local ctx="${1}"
  kubectl config set-context "${ctx}" --namespace="${2}"
  echo "Active namespace is \"${2}\".">&2
}

set_namespace() {
  local ctx prev
  ctx="$(current_context)"
  prev="$(current_namespace)"

  if grep -q ^"${1}"\$ <(get_namespaces); then
    switch_namespace "${ctx}" "${1}"

    if [[ "${prev}" != "${1}" ]]; then
      save_namespace "${ctx}" "${prev}"
    fi
  else
    echo "error: no namespace exists with name \"${1}\".">&2
    exit 1
  fi
}

list_namespaces() {
  local yellow darkbg normal
  yellow=$(tput setaf 3)
  darkbg=$(tput setab 0)
  normal=$(tput sgr0)

  local cur_ctx_fg cur_ctx_bg
  cur_ctx_fg=${KUBECTX_CURRENT_FGCOLOR:-$yellow}
  cur_ctx_bg=${KUBECTX_CURRENT_BGCOLOR:-$darkbg}

  local cur ns_list
  cur="$(current_namespace)"
  ns_list=$(get_namespaces)
  for c in $ns_list; do
    if [[ -t 1 && -z "${NO_COLOR:-}" && "${c}" = "${cur}" ]]; then
      echo "${cur_ctx_bg}${cur_ctx_fg}${c}${normal}"
    else
      echo "${c}"
    fi
  done
}

swap_namespace() {
  local ctx ns
  ctx="$(current_context)"
  ns="$(read_namespace "${ctx}")"
  if [[ -z "${ns}" ]]; then
    echo "error: No previous namespace found for current context." >&2
    exit 1
  fi
  set_namespace "${ns}"
}

main() {
  if [[ "$#" -eq 0 ]]; then
    list_namespaces
  elif [[ "$#" -eq 1 ]]; then
    if [[ "${1}" == '-h' || "${1}" == '--help' ]]; then
      usage
    elif [[ "${1}" == "-" ]]; then
      swap_namespace
    elif [[ "${1}" =~ ^-(.*) ]]; then
      echo "error: unrecognized flag \"${1}\"" >&2
      usage
    elif [[ "${1}" =~ (.+)=(.+) ]]; then
      alias_context "${BASH_REMATCH[2]}" "${BASH_REMATCH[1]}"
    else
      set_namespace "${1}"
    fi
  else
    echo "error: too many flags" >&2
    usage
  fi
}

main "$@"
[root@kmaster ~]# ls
components.yaml  custom-resources.yaml  kubens  tigera-operator.yaml
[root@kmaster ~]# mv kubens /bin/kubens
[root@kmaster ~]# chmod +x /bin/kubens 
[root@kmaster ~]# kubens 
calico-apiserver
calico-system
default
kube-node-lease
kube-public
kube-system
tigera-operator
[root@kmaster ~]# kubens kube-system
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "kube-system".
[root@kmaster ~]# kubens 
calico-apiserver
calico-system
default
kube-node-lease
kube-public
kube-system
tigera-operator

本文作者:kongshuo

本文链接:https://www.cnblogs.com/kongshuo/p/17412322.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   kongshuo  阅读(47)  评论(0编辑  收藏  举报
历史上的今天:
2022-05-18 docker容器配置与资源限制
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起