zoukankan      html  css  js  c++  java
  • 利用kubeadm部署k8s

    前段时间总算把实验室的OpenStack平台跑起来了,给实验室同学分了些虚拟机跑MATLAB等,用户反馈还可以,觉得做得工作还算有价值。所以将精力转移到项目上来了,最迫切的是搭建k8s平台。恰好cloudman老师也在更新k8s了,所以就参照cloudman的教程开始部署k8s。所以这篇文章主要转载自cloudman的博客,然后加上我自己遇到的一些坑。

    我的实验环境是VMware里面虚拟出来的三台ubuntu16.04虚拟机。部署一个三节点的k8s-cluster。一台master节点两个node节点。

    网络问题是安装失败的主要问题,但是由于处在教育网,可以很方便的用ipv6,所以只需要将ubuntu配置成能上ipv6就行。这里参考博客ubuntu16.04中使用ipv6中的方法。

    下载miredo 

    sudo apt-get install miredo

    查看ufw的配置文件

    sudo nano /etc/default/ufw

    这里要确认"IPV6=yes"

    最后执行如下命令:

     sudo invoke-rc.d networking restart

    测试ipv6

    ping6 ipv6.baidu.com

    到这里网络就设置好了,下面开始各节点组件的安装。

    安装Docker(所有节点都需要)

    apt-get update && apt-get install docker.io

    安装kubelet、kubeadm和kubectl(所有节点)

    kubelet运行在cluster所有节点上,负责启动pod和容器。

    kubeadm用于初始化cluster

    kubectl是k8s命令行工具。通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。  

    apt-get update && apt-get install -y apt-transport-https
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb http://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    apt-get update
    apt-get install -y kubelet kubeadm kubectl

    用kubeadm创建cluster

    初始化Master

    在master节点上执行如下命令:

    kubeadm init --apiserver-advertise-address 10.0.0.70 --pod-network-cidr=10.244.0.0/16

    注意这里的10.0.0.70是master节点的IP地址。

    执行kubeadm命令会报不支持swap的错误。

    经过Google,找到一种解决方案。依次执行如下命令:

    iptables -F
    swapoff -a
    free -m
    kubeadm reset
    

    然后再次执行kubeadm命令即可。

    在kubeadm命令中,--apiserver-advertise-address指明用master的哪个interface与cluster的其他节点通信。我这里的10.0.0.70是master节点的IP地址。

    --pod-network-cidr指定pod网络的范围。

    初始化过程如下:

    初始化过程中会生成token和证书,生成kubeconfig文件,kubelet需要这个文件与master通信。安装各种组件。

    配置kubectl

    kubectl是管理k8s cluster的命令行工具。master初始化完成后需要做一些配置工作。

    su - master
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    启用kubectl命令自动补全功能。

    echo "source <(kubectl completion bash)" >> ~/.bashrc
    

    安装pod网络

    这里使用fannel的网络解决方案。执行如下命令部署flannel:

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    在node1和node2上分别执行如下命令,将其注册到cluster中:

    kubeadm join --token 192fb8.f1b88629df07b383 10.0.0.70:6443 --discovery-token-ca-cert-hash sha256:df39872f286afc3d9711c088a18785422025418139b23c7fa7c81c71f2eb3c9b

    这行命令是在master节点初始化完能够找到的。token可以根据kubeadm token list查看。

    这里有个小插曲,第一次部署的时候,我再VMware里面虚拟出来的ubuntu主机名都是ubuntu,后面执行join命令也没报报错,但是kubectl get node 就只有master节点,后面我将两台node节点的主机名分别改成了node1和node2,再次执行join就成功了。

    加入成功能看到如下界面:

    通过kubectl get nodes查看节点状态,会发现所有节点会处在NotReady状态,这是因为每个节点都需要启动若干组件,这些组件都是在pod中运行,需要首先从Google下载镜像,可通过如下命令查看pod状态:

    kubectl get pod --all-namespaces

    当image都成功下载后,所有pod会处于Runing状态。所有的节点都已经Ready,k8s-cluster创建成功。

  • 相关阅读:
    PythonStudy——数据类型总结 Data type summary
    PythonStudy——可变与不可变 Variable and immutable
    PythonStudy——列表操作 List operatio
    PythonStudy——列表的常用操作 List of common operations
    PythonStudy——列表类型 List type
    PythonStudy——字符串扩展方法 String extension method
    PythonStudy——字符串重要方法 String important method
    AWT,Swing,RCP 开发
    JQuery插件机制
    最新知识网站
  • 原文地址:https://www.cnblogs.com/neutronman/p/8026257.html
Copyright © 2011-2022 走看看