zoukankan      html  css  js  c++  java
  • Ubuntu16.04+K8s安装配置(不FQ)

    Ubuntu上K8s安装配置(不FQ)


    k8s简介

    Kubernetes简称k8s,主要是基于容器技术的分布式架构领先方案。它是google严格保密十几年的密码武器-Borg的一个开源版本。

    Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    k8s特点

    • 容器的自动化复制和部署。随时扩展或收缩容器规模,并提供负载均衡
    • 方便地容器升级
    • 提供容器弹性,如果失效就替代它

    环境配置

    主机 用途 主机名 操作系统 网络模式 内存
    192.168.150.130 k8s-master Ubuntu Ubuntu16.04 桥接 1024M
    192.168.150.129 k8s-node Ubuntu-node Ubuntu16.04 桥接 1024M

    说明:这里的ubuntu使用的是Virtual Box安装的虚拟机,主机名必须不一样。

    安装部署


    安装说明

    1. 2台主机上都要安装docker,参考Docker学习:Docker安装和基本使用
    2. 2台主机上都要安装kubeadm、kubelet和kubectl
    3. 2台主机上都要禁用虚拟内存

    关闭swap(Master和Node都需要)

    kubernetes要求必须关闭swap。

    同时一定要记得把/etc/fstab包含swap那行记录删掉

    # 关闭虚拟内存
    swapoff -a
    

    安装更新apt-transport-https curl(Master和Node都需要)

    # 安装更新apt-transport-https curl
    apt-get update && apt-get install -y apt-transport-https curl
    

    增加kubernetes aliyun镜像源(Master和Node都需要)

    # 增加kubernetes aliyun镜像源
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    

    安装kubeadm/kubelet/kubectl(Master和Node都需要)

    # 安装kubeadm/kubelet/kubectl
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    apt-mark hold kubelet kubeadm kubectl
    

    kubeadm初始化,使用aliyun(仅Master)

    kubeadm init 
        --apiserver-advertise-address=192.168.150.130 
        --image-repository registry.aliyuncs.com/google_containers 
        --kubernetes-version v1.14.2 
        --pod-network-cidr=10.244.0.0/16
    

    说明

    1. 注意这里执行初始化用到了- -image-repository选项,指定初始化需要的镜像源从阿里云镜像仓库拉取。国外服务器的镜像仓库经常出现超时,当然也可以使用国内其他镜像。
    2. --apiserver-advertise-address:指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。
    3. --image-repository:Kubenetes默认Registries地址是 k8s.gcr.io,在国内并不能访问 gcr.io,在1.13版本中我们可以增加–image-repository参数,默认值是 k8s.gcr.io,将其指定为阿里云镜像地址:registry.aliyuncs.com/google_containers
    4. --kubernetes-version:关闭版本探测,因为它的默认值是stable-1,会导致下载最新版本,这里固定版本1.14.2的
    5. --pod-network-cidr:指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr 有自己的要求,这里设置为 10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。如果使用weave Network则可以不用配置此项,具体可参考说明

    完整的官方文档可以参考:

    https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

    https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/

    执行安装成功之后,可以看到如下截图

    其中需要将此段信息复制保存在本地文件,如下

    Your Kubernetes control-plane has initialized successfully!
    
    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.150.130:6443 --token xfn9s1.3iei2015u7ltjbqw 
        --discovery-token-ca-cert-hash sha256:5a2efa18004e4b491119403ac55fa47d88c75414e2ffdda59cb56fb673236d0c 
    
    

    初始化过程说明:

    1. [preflight] kubeadm 执行初始化前的检查。
    2. [kubelet-start] 生成kubelet的配置文件”/var/lib/kubelet/config.yaml”
    3. [certificates] 生成相关的各种token和证书
    4. [kubeconfig] 生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信
    5. [control-plane] 安装 Master 组件,会从指定的 Registry 下载组件的 Docker 镜像。
    6. [bootstraptoken] 生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到
    7. [addons] 安装附加组件 kube-proxy 和 kube-dns。
    8. Kubernetes Master 初始化成功,提示如何配置常规用户使用kubectl访问集群。
    9. 提示如何安装 Pod 网络。
    10. 提示如何注册其他节点到 Cluster。

    配置 kubectl(master执行)

    kubectl 是管理 Kubernetes Cluster 的命令行工具,前面已经在所有的节点安装了 kubectl。Master 初始化完成后需要做一些配置工作,然后 kubectl 就能使用了。
    依照 kubeadm init 输出的最后提示

    # 保存集群安全配置文件到当前用户.kube目录,说明当前操作是使用root命令进行操作
     mkdir -p $HOME/.kube
     cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     chown $(id -u):$(id -g) $HOME/.kube/config
    # 启用 kubectl 命令自动补全功能(注销重新登录生效)
     echo "source <(kubectl completion bash)" >> ~/.bashrc
    

    master上安装网络插件flannel(master执行)

    要让 Kubernetes Cluster 能够工作,必须安装 Pod 网络,否则 Pod 之间无法通信。
    Kubernetes 支持多种网络方案,这里我们使用 flannel

    # master上执行网络插件
     sysctl net.bridge.bridge-nf-call-iptables=1
     curl -O https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
    

    修改网络插件配置(master执行)

    vim kube-flannel.yml
     # 找到 tolerations 下方增加:
     - key: node.kubernetes.io/not-ready
            operator: Exists
            effect: NoSchedule
    

    保存并应用配置(master执行)

    kubectl apply -f kube-flannel.yml
    

    Node节点加入集群(仅Node执行)

    # 在node上执行join命令
     kubeadm join 192.168.150.130:6443 --token xfn9s1.3iei2015u7ltjbqw 
        --discovery-token-ca-cert-hash sha256:5a2efa18004e4b491119403ac55fa47d88c75414e2ffdda59cb56fb673236d0c
    

    说明

    加入集群此命令是Master初始化成功之后,最后的一段代码,可参考上面信息。

    配置iptables(Node执行)

    # 在node上执行
     sysctl net.bridge.bridge-nf-call-iptables=1
    

    集群验证


    然后根据提示,我们可以通过 kubectl get nodes 查看节点的状态:

    集群状态查看(Master执行)

    # 在master上检测pod是否正常
     kubectl get node
     kubectl get pod --all-namespaces
    

    从上图中我们可以看到,kube-flannel-ds-frcjfkube-flannel-ds-2cvkn状态是ImagePullBackOff,这个如何解决呢?我们可以通过 kubectl describe pod 查看 Pod 具体情况,以确认拉取失败的镜像

    # describe查看(Master执行)
     kubectl describe po kube-flannel-ds-frcjf -n kube-system
    

    执行结果如下

    kubectl describe po kube-flannel-ds-frcjf -n kube-system
    ......
    Events:
      Type     Reason     Age                 From                Message
      ----     ------     ----                ----                -------
      Normal   Scheduled  2m14s               default-scheduler   Successfully assigned kube-system/kube-flannel-ds-frcjf to k8s-node
      Warning  Failed     109s                kubelet, k8s-node  Failed to pull image "quay.io/coreos/flannel:v0.10.0-amd64": rpc error: code = Unknown desc = Error response from daemon: Get https://quay.io/v2/: net/http: TLS handshake timeout
      Warning  Failed     109s                kubelet, k8s-node  Error: ErrImagePull
      Normal   BackOff    108s                kubelet, k8s-node  Back-off pulling image "quay.io/coreos/flannel:v0.10.0-amd64"
      Warning  Failed     108s                kubelet, k8s-node  Error: ImagePullBackOff
      Normal   Pulling    94s (x2 over 2m6s)  kubelet, k8s-node  pulling image "quay.io/coreos/flannel:v0.10.0-amd64"
    

    先使用kubectl describe po查看问题,这里发现是flannel:v0.10.0-amd64文件无法下载。可以使用docker pull重新下载镜像。

    #在node上重新pull flannel:v0.10.0-amd64(Node执行)
     docker pull registry.cn-shenzhen.aliyuncs.com/lurenjia/flannel:v0.10.0-amd64
     docker tag registry.cn-shenzhen.aliyuncs.com/lurenjia/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
    

    这里是因为无法从 quay.io/coreos/flannel:v0.10.0-amd64 下载镜像,所以从阿里云或者dockerhub镜像仓库下载,然后改回原来的tag。直接从quay.io/coreos/flannel:v0.10.0-amd64 下载镜像,执行此下命令即可:

    docker pull quay.io/coreos/flannel:v0.10.0-amd64
    

    删除Node(Master执行)

    Node节点中出现问题的镜像已经拉去下来,此时我们可以删除有问题的pod,K8S会自动调度pod。

    # 删除pod
     kubectl delete pod kube-flannel-ds-2cvkn -n kube-system
    

    然后再度使用kubectl get nodekubectl get pod --all-namespaces可以查看节点集群状态,删除之后需要等待一段时间,pod才能启动,如图

    注:以上内容根据慕课网完成。

    参考部分博客信息:

    墙内安装kubernetes教程

  • 相关阅读:
    初次安装git配置用户名和邮箱
    UBUNTU16.04 使用APT-GET如何设置代理
    keras中TimeDistributed
    keras load model 遇到 自定义函数 Lambda(lambda x: softmax(x, axis=1), NameError: global name 'softmax' is not defined
    <<Joint Deep Modeling of Users and Items Using Reviews for Recommendation>> 评论打分预测
    将Pytorch模型从CPU转换成GPU
    tensorflow显存管理
    搭建Python3的jupyter notebook服务器
    《User Modeling with Neural Network for Review Rating Prediction》评论打分预测
    flv视频播放器停止时带图片
  • 原文地址:https://www.cnblogs.com/LOVEYU/p/10902783.html
Copyright © 2011-2022 走看看