• kubernetes教程-基本学习环境配置


    kubernetes教程-基本学习环境配置

    安装必要工具

    kubectl

    Kubernetes的命令行工具, kubectl, 允许你在Kubernetes集群中运行命令. 你可以用kubectl来部署应用, 检查和管理集群资源, 并查看日志。有关更多信息,包括 kubectl的全部命令完整列表, 查看 kubectl reference documentation.

    kubectl 可安装在各种 Linux 平台、macOS 和 Windows 上。在下面找到您喜欢的操作系统。

    kind

    kind 让您可以在本地计算机上运行 Kubernetes.该工具要求您安装了 Docker 或 Podman .

    kind的 Quick Start 页面向您显示了启动并运行 kind 需要执行的操作。

    View kind Quick Start Guide

    minikube

    与“kind”一样,“minikube” 是一个可让您在本地运行 Kubernetes 的工具。 minikube 在您的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一体化或多节点本地 Kubernetes 集群,以便您可以试用 Kubernetes,或进行日常开发工作。

    如果您的重点是安装该工具,则可以按照官方的入门! 指南进行操作。

    View minikube Get Started! Guide

    一旦“minikube”正常工作,您就可以使用它来运行示例应用程序

    kubeadm

    您可以使用 kubeadm 工具来创建和管理 Kubernetes 集群。它执行必要的操作,以用户友好的方式启动并运行最小可行的安全集群。
    安装 kubeadm 向您展示如何安装 kubeadm。安装后,您可以使用它来创建集群

    View kubeadm Install Guide

    在ubuntu(22.04)中安装

    在中国使用minikube

    先看下aliyun为中国大陆提供的minikube本土化使用文章

    Minikube - Kubernetes本地实验环境-阿里云开发者社区

    cpu_x86

    • 使用以下命令下载最新版本:
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    
    • 1
    • 安装
    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    
    • 1
    • 测试以确保您安装的版本是最新的

      kubectl version --client
      
      • 1

    Image1

    验证 kubectl 配置

    为了让 kubectl 找到并访问 Kubernetes 集群,它需要一个 kubeconfig 文件,该文件是在您使用 kube-up.sh 创建集群或成功部署 Minikube 集群时自动创建的。默认情况下,kubectl 配置位于 ~/.kube/config。
    通过获取集群状态来检查 kubectl 是否已正确配置:
    kubectl 集群信息
    如果您看到 URL 响应,则说明 kubectl 已正确配置为访问您的集群。
    如果您看到类似以下内容的消息,则 kubectl 未正确配置或无法连接到 Kubernetes 集群。
    与服务器 <服务器名称:端口> 的连接被拒绝 - 您指定了正确的主机或端口吗?
    例如,如果您打算在笔记本电脑上(本地)运行 Kubernetes 集群,则需要先安装 Minikube 等工具,然后重新运行上述命令。
    如果 kubectl cluster-info 返回 url 响应,但您无法访问集群,请使用以下命令检查其配置是否正确:
    kubectl 集群信息转储

    安装minikube

    minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。
    您所需要的只是 Docker(或类似兼容的)容器或虚拟机环境,而 Kubernetes 只需一个命令即可:“minikube start”

    必要条件

    • 2个或更多CPU
    • 2GB 可用内存
    • 20GB 可用磁盘空间
    • 网络连接
    • 容器或虚拟机管理器,例如:Docker、[QEMU](https://minikube.sigs.k8s.io/ docs/drivers/qemu/)、Hyperkit、[Hyper-V](https://minikube.sigs.k8s.io/ docs/drivers/hyperv/), KVM, [Parallels](https://minikube.sigs.k8s.io/docs/ drivers/parallels/), Podman, [VirtualBox](https://minikube.sigs.k8s.io/docs/drivers/ virtualbox/) 或 VMware Fusion/Workstation

    安装(debian)

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
    sudo dpkg -i minikube_latest_amd64.deb
    
    • 1
    • 2

    Image2

    启动你的集群

    从具有管理员访问权限的终端(但未以 root 身份登录),运行:

    minikube start
    
    • 1

    试图运行时报错:

    Image3

    按照建议运行,以为当前用户增加docker访问权限:

    sudo usermod -aG docker $USER && newgrp docker
    
    • 1

    成功:

    Image4

    这边有报错镜像找不到:

    Image5

    报错超时:

    Image6

    报错ip地址有两行,似乎是使用代理的问题。可以尝试删去阿里云docker代理:

    Image7

    尝试生成日志:

    Image8

    如何设置代理

    macOS and Linux

    export HTTP_PROXY=http://<proxy hostname:port>
    export HTTPS_PROXY=https://<proxy hostname:port>
    export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24
    
    minikube start
    
    • 1
    • 2
    • 3
    • 4
    • 5

    建议设置代理使用minikube

    重新启动minikube集群

    minikube stop
    minikube delete
    
    • 1
    • 2

    推荐使用如下命令适用国内

    听上去很蠢,但是指定kubernetes版本降级后它成功运行了

    minikube start --image-mirror-country='cn' --registry-mirror=你的阿里云镜像 --kubernetes-version=v1.23.8
    
    • 1

    Image9

    成功输出如:

    Image10

    Image11

    健康检查

    Image12

    打开控制面板及报镜像拉取失败解决

    minikube dashboard
    
    • 1

    然而报错:

    consider@consider-Dell-G15-5511:~$ minikube dashboard
    🤔  正在验证 dashboard 运行情况 ...
    🚀  正在启动代理...
    🤔  正在验证 proxy 运行状况 ...
    
    ❌  因 SVC_URL_TIMEOUT 错误而退出:http://127.0.0.1:33619/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ 不可访问:Temporary Error: unexpected response code: 503
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此处运行排查问题

    kubectl get pods --all-namespaces
    
    • 1
    consider@consider-Dell-G15-5511:~$ kubectl get pods --all-namespaces
    NAMESPACE              NAME                                         READY   STATUS             RESTARTS   AGE
    kube-system            coredns-65c54cc984-5vs9p                     1/1     Running            0          37m
    kube-system            etcd-minikube                                1/1     Running            0          37m
    kube-system            kube-apiserver-minikube                      1/1     Running            0          37m
    kube-system            kube-controller-manager-minikube             1/1     Running            0          37m
    kube-system            kube-proxy-7qgmq                             1/1     Running            0          37m
    kube-system            kube-scheduler-minikube                      1/1     Running            0          37m
    kube-system            storage-provisioner                          1/1     Running            0          37m
    kubernetes-dashboard   dashboard-metrics-scraper-7db978b848-cjq2q   1/1     Running            0          37m
    kubernetes-dashboard   kubernetes-dashboard-6f4c897964-gzmwn        0/1     ImagePullBackOff   0          37m
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    可以看到是这个节点问题,报镜像拉取错误

    kubernetes-dashboard   kubernetes-dashboard-6f4c897964-gzmwn     
    
    • 1

    检查一下节点日志

    consider@consider-Dell-G15-5511:~$ kubectl describe --namespace=kubernetes-dashboard po kubernetes-dashboard-6f4c897964-gzmwn
    Name:             kubernetes-dashboard-6f4c897964-gzmwn
    Namespace:        kubernetes-dashboard
    Priority:         0
    Service Account:  kubernetes-dashboard
    Node:             minikube/192.168.49.2
    Start Time:       Mon, 02 Oct 2023 18:07:57 +0800
    Labels:           gcp-auth-skip-secret=true
                      k8s-app=kubernetes-dashboard
                      pod-template-hash=6f4c897964
    Annotations:      
    Status:           Pending
    IP:               172.17.0.3
    IPs:
      IP:           172.17.0.3
    Controlled By:  ReplicaSet/kubernetes-dashboard-6f4c897964
    Containers:
      kubernetes-dashboard:
        Container ID:  
        Image:         docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93
        Image ID:      
        Port:          9090/TCP
        Host Port:     0/TCP
        Args:
          --namespace=kubernetes-dashboard
          --enable-skip-login
          --disable-settings-authorizer
        State:          Waiting
          Reason:       ImagePullBackOff
        Ready:          False
        Restart Count:  0
        Liveness:       http-get http://:9090/ delay=30s timeout=30s period=10s #success=1 #failure=3
        Environment:    
        Mounts:
          /tmp from tmp-volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-t4grc (ro)
    Conditions:
      Type              Status
      Initialized       True 
      Ready             False 
      ContainersReady   False 
      PodScheduled      True 
    Volumes:
      tmp-volume:
        Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
        Medium:     
        SizeLimit:  
      kube-api-access-t4grc:
        Type:                    Projected (a volume that contains injected data from multiple sources)
        TokenExpirationSeconds:  3607
        ConfigMapName:           kube-root-ca.crt
        ConfigMapOptional:       
        DownwardAPI:             true
    QoS Class:                   BestEffort
    Node-Selectors:              kubernetes.io/os=linux
    Tolerations:                 node-role.kubernetes.io/master:NoSchedule
                                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
    Events:
      Type     Reason     Age                  From               Message
      ----     ------     ----                 ----               -------
      Normal   Scheduled  38m                  default-scheduler  Successfully assigned kubernetes-dashboard/kubernetes-dashboard-6f4c897964-gzmwn to minikube
      Warning  Failed     16m (x4 over 32m)    kubelet            Error: ErrImagePull
      Warning  Failed     15m (x8 over 32m)    kubelet            Error: ImagePullBackOff
      Normal   BackOff    15m (x9 over 32m)    kubelet            Back-off pulling image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93"
      Warning  Failed     10m (x5 over 32m)    kubelet            Failed to pull image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93": rpc error: code = Unknown desc = context canceled
      Normal   Pulling    7m42s (x6 over 38m)  kubelet            Pulling image "docker.io/kubernetesui/dashboard:v2.7.0@sha256:2e500d29e9d5f4a086b908eb8dfe7ecac57d2ab09d65b24f588b1d449841ef93"
    
    • 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
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    我们需要进入到控制台中手动拉取镜像,具体来说

    • minikube ssh
      
      • 1

    Image13

    • 因为是拉取这个镜像报错,我们手动pull并重新打标签

    • docker.io/kubernetesui/dashboard:v2.7.0
      
      • 1

    我这边拉不下来所以手工上穿镜像再拉

    Image14

    如果手工上传镜像你做不到看这里,我使用这种比较拐弯莫叫的做法成功了

    1. 我拉取了所需要的镜像到本地

    2. Image15

    3. 接下来把这个镜像制作成压缩包

    4. docker save -o k.tar kubernetesui/dashboard:v2.7.0
      
      • 1
    5. Image16

    6. 在当前终端运行这个来使得当前终端的镜像构建与minikube同步

    7. eval $(minikube docker-env)
      
      • 1
    8. Image17

    9. 然后加载它

    10.  docker load -i k.tar
      
      • 1
    11. Image18

    12. Image19

    13. 成功打开dashboard

    14. Image20

  • 相关阅读:
    Mysql如何理解Sql语句?MySql分析器
    管道通信: 有名管道 无名管道,行业大牛通通教会你
    【App 抓包提示网络异常怎么破?】
    【spring源码系列】之【FactoryBean类型的接口】
    短视频剪辑:如何批量调整播放倍速,轻松掌控节奏?
    终于可以一行代码也不用改了!ShardingSphere 原生驱动问世
    “对症下药”,高效控价——控价方法详解
    程序设计与算法(三)C++面向对象程序设计 第四周 运算符重载 笔记
    计算机网络第六章——应用层(下)
    Vue + Element-UI —— 项目实战(八)(完结)
  • 原文地址:https://blog.csdn.net/qq_42901723/article/details/133500647