当前位置:   article > 正文

K8s初次入门

K8s初次入门

初步:搭建k8s集群

k8s 集群主机清单

主机名 ip地址
master 1.50
node-0001 1.51
node-0002 1.52
node-0003 1.53
node-0004 1.54
node-0005 1.55
harbor 1.30

事先准备

  1. 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap)

  2. 安装工具

    dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
    
    • 1

    修改配置文件
    vim /etc/containerd/config.toml

    61:sandbox_image = "harbor:443/k8s/pause:3.9"
    125:SystemdCgroup = true
    154行新插入:      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    
              endpoint = ["https://harbor:443"]
    
            [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]
    
              endpoint = ["https://harbor:443"]
    
            [plugins."io.containerd.grpc.v1.cri".registry.configs."harbor:443".tls]
    
              insecure_skip_verify = true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  3. 配置内核参数

    [root@master ~]# cat /etc/modules-load.d/containerd.conf
    overlay
    br_netfilter
    xt_conntrack
    [root@master ~]# systemctl start systemd-modules-load.service
    [root@master ~]# cat /etc/sysctl.d/99-kubernetes-cri.conf
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.netfilter.nf_conntrack_max = 1000000
    [root@master ~]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    设置Tab补全功能键

    [root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm)
    # 使用kubeadm completion bash生成适用于bash shell的kubeadm命令补全脚本,通过重定向将以上脚本作为source命令的输入,既激活kubeadm的命令补全功能,同时使用tee命令将补全脚本保存在指定的kubeadm文件中,确保未来bash会话h中,无需执行以上命令就可以享受kubeadm命令补全功能。
    [root@master ~]# source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl)
    #同理如上,此次针对kubectl命令的补全功能
    
    • 1
    • 2
    • 3
    • 4

    对master主控节安装

    1. 测试系统环境

      [root@master ~]# kubeadm init --config=init/init.yaml --dry-run 2>error.log
      # --dry-run 模拟测试,不会对系统环境产生影响
      [root@master ~]# cat error.log
      # 查看是否有生成错误信息和警告
      [root@master ~]# rm -rf error.log /etc/kubernetes/tmp
      # 删除前任初始化的残留tmp,可以说没必要,模拟测试不会产生任何临时文件
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    2. 主控节点初始化

      [root@master ~]# kubeadm init --config=init/init.yaml | tee init/init.log
      # 初始化主控节点,会生成/etc/kubernetes/admin.conf
      [root@master ~]# mkdir -p $HOME/.kube
      [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
      # 给本地用户创建个集中便捷,具有管理员权限的k8s客户端配置环境,无需通过系统目录的配置admin.conf对k8s客户端进行管理,更好使用kubectl等工具管理初始化好的k8s集群
      # 复制 admin.conf 到 ~/.kube/config 是为了方便本地用户(尤其是非 root 用户)使用 kubectl 等 Kubernetes 客户端工具与刚刚初始化的集群进行交互。
      
      
      # 验证安装结果
      [root@master ~]# kubectl get nodes
      
      NAME     STATUS     ROLES           AGE   VERSION
      master   NotReady   control-plane   19s   v1.26.0
      # notready 尚未准备好接收工作负载
      
      #部署calico网络插件
      [root@master calico]# kubectl apply -f calico.yaml
      [root@master calico]# kubectl get nodes
      
      NAME     STATUS   ROLES           AGE   VERSION
      master   Ready    control-plane   23m   v1.26.0
      #此时ready准备好进行工作负载
      # Calico 是一个流行的开源网络解决方案,常用于 Kubernetes 集群中提供网络连接、策略管理和安全性。
      # 可使用 kubectl get pods -n calico-system 等命令监控 Calico 组件的状态,确保它们成功启动且运行正常。
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
    3. 安装计算节点(node系列)

      1.先从master主机获取凭证

      # 查看 token
      
      [root@master ~]# kubeadm token list
      
      TOKEN                     TTL         EXPIRES                
      
      abcdef.0123456789abcdef   23h         2022-04-12T14:04:34Z
      
      # 删除 token
      
      [root@master ~]# kubeadm token delete abcdef.0123456789abcdef
      
      bootstrap token "abcdef" deleted
      
      # 创建 token
      
      [root@master ~]# kubeadm token create --ttl=0 --print-join-command
      # ttl设置token到期周期,0为无限期
      kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467
      # 只需要复制以上生成的命令到各个计算节点粘贴执行就好
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20

      2.对各个计算节点进行配置(是否防火墙关掉/禁用swap、安装k8s相关软件包、配置内核参数)

      3.逐个加入master集群

      kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467
      
      • 1
    4. 通过master主机查看所有加入集群的计算节点主机

      # 验证节点工作状态
      [root@master ~]# kubectl get nodes
      
      # 验证容器工作状态
      [root@master ~]# kubectl -n kube-system get pods
      
      • 1
      • 2
      • 3
      • 4
      • 5

      k8s集群管理

集群管理命令

子命令 说明
help 用于查看命令及子命令的帮助信息
cluster-info 显示集群的相关配置信息
version 查看服务器及客户端的版本信息
api-resources 查看当前服务器上所有的资源对象
api-versions 查看当前服务器上所有资源对象的版本
config 管理当前节点上kubeconfig 的认证信息
  • kubectl api-resources 
    NAME             SHORTNAMES     APIVERSION      NAMESPACED      KIND
    
    bindings                        v1              true            Binding
    
    endpoints        ep             v1              true            Endpoints
    
    # 查看资源对象类型
    namespaced 是否属于某命名空间,如果是false则是集群级别的,不属于任何特定命名空间,而是与整个集群的运行状态相关。
    kind 资源类型名
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • config

    # 查看当前认证使用的用户及证书
    
    [root@master ~]# kubectl config get-contexts 
    
    CURRENT   NAME                          CLUSTER      AUTHINFO
    
    *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
    
    # 使用 view 查看详细配置
    
    [root@master ~]# kubectl config view 
    
    apiVersion: v1
    
    clusters:
    
    - cluster:
    
        certificate-authority-data: DATA+OMITTED
    
        server: https://192.168.1.50:6443
    
      name: kubernetes
    
    contexts:
    
    - context:
    
        cluster: kubernetes
    
        user: kubernetes-admin
    
      name: kubernetes-admin@kubernetes
    
    current-context: kubernetes-admin@kubernetes
    
    kind: Config
    
    preferences: {
         }
    
    users:
    
    - name: kubernetes-admin
    
      user:
    
        client-certificate-data: REDACTED
    
        client-key-data: REDACTED
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

对其他主机进行管理授权

设置本地用户的 Kubernetes 配置文件,以便于使用 kubectl 等命令行工具以管理员身份访问和管理 Kubernetes 集群

[root@harbor ~]# dnf install -y kubectl

[root@harbor ~]# mkdir -p $HOME/.kube

[root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config

[root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config

# 验证节点工作状态
[root@harbor ~]# kubectl get nodes
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

何为pod?

pod由一个或者多个容器组成

pod是k8s中最小的管理元素

pod是一个服务的多个进程的聚合单位

同一个pod共享网络ip以及权限、共享主机名称、共享存储设备

pod管理命令

子命令 说明 备注
run/create 创建资源对象 可输出资源文件模板
get 查看资源对象的状态信息 常用参数: -o 显示格式
describe 查询资源对象的属性信息
logs 查看容器的报错信息 常用参数: -c 容器名称
exec 在某一个容器内执行特定的命令 可选参数: -c 容器名称
cp 在容器和宿主机之间拷贝文件或目录 可选参数: -c 容器名称
delete 删除资源对象 可选参数: -l 标签
  • get

    kubectl get pods
    # 查看默认名称空间default下的pods
    
    kubectl get pods -o name/wide/yaml/json
    #看pod名、详细信息、yaml格式的、json格式的详细信息
    
    kubectl get namespaces
    //查看所有名称空间
    
    kubectl -n kube-system get pods
    //查看指定的命名空间的所有pod(pods)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • create

kubectl create namespace work //创建命名空间资源对象
  • 1
  • run

    kubectl -n work run myhttp --image=myos:httpd
    #在work命名空间创建myhttp的pod资源对象
    
    • 1
    • 2
  • describe

    kubectl describe pod myweb   //查看资源对象的属性信息  是default命名空间的myweb如果要看work命名空间下的myhttp,则需要kubectl -n work describe pod myhttp
    # 可以查看到myweb资源分配给了哪位计算节点
    
    • 1
    • 2
  • logs

    kubectl logs myweb  //查看myweb日志
    
    • 1
  • exec

    kubectl exec myweb -- ls //在myweb执行命令ls
    
    kubectl exec -it myweb -- /bin/bash //以交互式进入bash
    
    • 1
    • 2
    • 3
  • cp

    kubectl cp myweb:/etc/yum.repos.d /root/aaa
    
    • 1
  • delete

    kubectl delete pods myweb 
    
    kubectl -n work delete pods --all
    
    kubectl delete namespaces work
    
    • 1
    • 2
    • 3
    • 4
    • 5

    资源对象文件入门

    简单的资源对象文件例如:

    cat myweb.yaml

    ---
    kind: Pod  //资源类型pod
    apiVersion: v1 //k8s api版本v1,是当前稳定的版本
    metadata:
      
    • 1
    • 2
    • 3
    • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/501295
推荐阅读
  • 相关标签
      

    闽ICP备14008679号