kubectl安装

kubectl master节点安装

  • kubectl保存至master节点/usr/bin中

kubectl node节点安装

  • 在node节点上执行kubectl时,由于kubectl默认连接本机apiserver,所以node节点会提示The connection to the server localhost:8080 was refused - did you specify the right host or port?;解决方案./kubectl -s http://10.254.0.53:8080 get pods

node节点执行kubectl省略-s

通过http的方式,无需任何认证

apiVersion: v1
clusters:
- cluster:
    server: http://10.254.0.78:8080 # 指定master节点ip
  name: test-cluster
contexts:
- context:
    cluster: test-cluster
  name: default-system
current-context: default-system  # 指定当前的环境

通过用户密码认证的方式

生成ca证书,由于是https访问,所以需要https ca证书

  • 创建一个新的SA:kubectl create sa test-sa

  • 获取secrets.name:通过kubectl get sa test-sa -o jsonkubectl describe sa test-sa获取test-sa-token-q48sd

    [root@k8s-master sa]# kubectl get sa test-sa -o json
    {
        "apiVersion": "v1",
        "kind": "ServiceAccount",
        "metadata": {
            "creationTimestamp": "2018-11-13T01:16:11Z",
            "name": "test-sa",
            "namespace": "default",
            "resourceVersion": "562118",
            "selfLink": "/api/v1/namespaces/default/serviceaccounts/test-sa",
            "uid": "b5423679-e6e1-11e8-afac-0800278d208d"
        },
        "secrets": [
            {
                "name": "test-sa-token-q48sd"
            }
        ]
    }
    
  • 获取CA证书:通过kubectl get secret test-sa-token-q48sd -o json,获取ca.crt粘贴到文件ca.crt.source,然后执行命令cat ca.crt.source |base64 -d > ca.crt

  • 获取token:通过kubectl get secret test-sa-token-q48sd -o json,获取token粘贴到文件token.source,然后执行命令cat token.source |base64 -d > ./token

  • 将ca.crt复制到node节点的.kube文件夹下

生成用户密码

参考 静态密码文件

  1. /etc/kubernetes目录下创建密码文件 如 base_auth.csv
    内容为pwd,user,user-1
  2. 修改/etc/kubernetes/apiserver,添加参数 --basic-auth-file=/etc/kubernetes/basic-auth.csv

修改config文件

  • 在.kube文件夹下添加config文件
apiVersion: v1
clusters:
- cluster:
    certificate-authority: ca.crt # 指定证书
    server: https://10.254.0.78:6443 # 指定master节点ip
  name: test-cluster
contexts:
- context:
    cluster: test-cluster
    user: default-admin # 若不指定访问上下文的用户,则每次使用命令均需要输入账号密码
  name: default-system
current-context: default-system  # 指定当前的环境
users:
- name: default-admin
  user:
    as-user-extra: {}
    password: pwd
    username: user
  • 在node上成功执行kubectl get pods
    参考

k8s kubectl 命令自动补全

参考

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

疑问:为什么在当前master节点上不需要配置config文件即可使用kubectl

由于 kubectl 默认的 current-context 是 http://localhost:8080,该请求不需要任何验证即可
而其它节点若配置http://masterip:8080也不需要认证
但是如果配置的是https://masterip:6443 或 https://kubernets:443 则需要进行ca 或 用户 认证

kubectl的使用

根据deployment等生成 service

kubectl expose type name
type:类型如 rs rc deployment
name:rs rc 或 deployment的名称
例:kubectl expose deployment nginx-deployment-bak

http://docs.kubernetes.org.cn/488.html