Kubernetes

K8S默认是在default的namespace下,但是很多时候我们是在一个新的namespace下部署应用,每个操作都需要指定namespace,非常不方便。那么有没有办法切换namespce呢?如果可以切换的话,那有没有更简单的办法。

最简单的方式切换namespace,赠送一个方便的脚本

可以将它alias到一个新的命令”kubectl ns”

1
2
$  alias kubectl='_kubectl_custom(){ if [[ "$1" == "project" && "$2" != "" ]]; then ccontext=`kubectl config current-context`; kubectl config set-context $ccontext --namespace=$2; elif [[ "$1" == "projects" && "$2" == "" ]]; then kubectl get ns; elif [[ "$1" == "project" && "$2" == "" ]]; then project=$(kubectl config get-contexts | sed -n "2p" | awk "{print \$5}"); if [[ "$project" == "" ]]; then echo default; else echo $project; fi; else kubectl $*; fi;}; _kubectl_custom'
$ alias oc='kubectl'

验证

1
2
3
4
5
[root@localhost k8s]# kubectl project test
Context "kubernetes-admin@kubernetes" modified.
[root@localhost k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-46mfd 1/1 Running 0 16h

成功切换了namespace,同时对之前的命令没有任何影响。

相关配置具体操作

kubernetes的运行时是通过~/.kube/config文件的配置来设置的

  1. 查看当前cluster config配置
    1
    $ kubectl config view
  2. 如果没有的话,可以添加cluster配置
    1
    $ kubectl config set-cluster kubernetes-cluster --server=https://192.168.1.128:6443
  3. 新建context运行时
    1
    $ kubectl config set-context {{ namespace }} --namespace={{ namespace }} --cluster=kubernetes-cluster --userkubernetes-admin
  4. 设置当前运行环境
    1
    $ kubectl config use-context {{ namespace }}
    这时所有操作默认都会在下操作。

直接更改当前context的namespace

1
$ kubectl config set-context --current --namespace={{ namespace }}

补充Openshift

openshift就非常方便了,把这些操作都进行了封装,在创建project时也会自动把context加入到kubeconfig的配置中,如果需要切换运行环境,只要执行oc project {{ projectname }}就好了。

kubernetes也可以使用Ansible进行安装生产集群: kubespray 

Kubernetes添加节点前Token忘了怎么办?

1
2
3
4
5
6
7
8
[root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
cda2299d203e26b6499e8283937ffbb6489421ff761569fdf8172d03d9a889d6

[root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
qyg3si.njhyhixcqd18by2g 23h 2019-07-27T15:13:15+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token

[root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# kubeadm join 172.17.3.226:6443 --token qyg3si.njhyhixcqd18by2g --discovery-token-ca-cert-hash sha256:cda2299d203e26b6499e8283937ffbb6489421ff761569fdf8172d03d9a889d6

或者创建新的token

1
[root@iZ2ze436suxv73x9jtiy2vZ helm-demo-master]# kubeadm token create --print-join-command