k8s入门之一用kubeadm部署kubernetes单master集群教程

一、前言

k8s的部署方式:

  1. 传统方式,从github上拉取对应的二进制安装包,解压安装各个组件和节点,过程步骤复杂,特别是各组件要通信,配置各种ca证书。GitHub链接
  2. 由于传统方式安装比较麻烦,所以我们用kubeadm(k8s官方提供的集群部署工具)安装,只需按照以下基本步骤安装即可:
    • master,nodes机器上安装:kubelet、kubeadm和docker,其中node和master都要运行在kebulet和docker环境之上
    • Master:用kubeadm init 命令,拉取下载相关的组件镜像,并启动相关pods(静态pods,不受k8s自身管理),相关的pods组件有:etcd、api-server、controller-manager、scheduler
    • Nodes:用kubeadm join命令把nodes加入到k8s集群中
    • flannel组件,也是运行在pods的守护级进程,起到个nodes的通信作用。是一个额外的组件(adds on)。GitHub链接
    • kubeadm相关参考文档

二、准备工作

  1. kubernetes部署图

  2. 关闭Firewalld和iptables,时间同步。

    sudo systemctl stop firewalld

    sudo systemctl disable firewalld`

  3. 由于docker会大量生成iptables规则,所以要确保以下这两个配置是1

    cat /proc/sys/net/bridge/bridge-nf-call-ip6tables

    cat /proc/sys/net/bridge/bridge-nf-call-iptables

    ### 网络配置文件
    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    vm.swappiness=0
    EOF
    
    modprobe br_netfilter  #执行该命令 如果不执行就会在应用k8s.conf时出现加载错误
    sysctl -p /etc/sysctl.d/k8s.conf #应用配置文件
    
    
    
  4. 修改host和hostname

    因为集群节点的名称会和机器的hostname一致,所以host的解释名称统一修改和hostname一致。具体为:

    • /etc/hosts文件为(所有节点都是):

      127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

      192.168.33.30 master.k8s.com 192.168.33.31 node1.k8s.com 192.168.33.32 node2.k8s.com 127.0.0.1 node2.k8s.com

    • /etc/hostname为(master节点为例)

三、kubelet核心环境安装192.168.33.32

在master和nodes的机器上都要按照以下步骤,安装kubelet、kubeadm、docker-ce和kubectl(k8s客户端工具),具体步骤为:

  • 指定docker-ce的yum仓库源

    `cd /etc/yum.repos.d/

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`

  • kubernetes阿里云镜像仓库

    指定kubernetes的yum仓库:

    `cd /etc/yum.repos.d/

    Sudo vi kubernetes.repo`

    kubernetes.repo的配置如下:

    [kubernetes]

    name=Kubernetes Repo

    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

    enabled=1

    gpgcheck=1

    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

  • 然后下载yum-key.gpg和rpm-package-key.gpg

    sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg

    sudo wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

    导入:

    sudo rpm --import yum-key.gpg

    sudo rpm --import rpm-package-key.gpg

  • 运行yum repolist 看下docker和kubernetes是否有包了。

  • 运行安装命令。分别安装docker-ce,kubelet,kubeadm和kubectl(kubernetes命令行客户端)

    sudo yum install docker-ce kubelet kubeadm kubectl(默认安装最新版的)

    如要安装指定版本,可以:

    sudo yum list kubelet --showduplicates //查看所有可用版本

    sudo yum install kubelet-1.13.4-0 kubectl-1.13.4-0 kubeadm-1.13.4-0 kubernetes-cni-0.6.0-0

四、设定kubelet

在启动kubelet前,看看安装了哪些文件

早期的k8s版本不允许打开swap,会直接start会报错,我们先启动一下看看

由于kubelet相关配置还没完成,现在不能直接启动。先停止,设置开机启动先。

sudo systemctl stop kubelet

sudo systemctl enable kubelet

sudo systemctl enable docker

修改kubelet配置文件的额外参数:

sudo vi /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

五、master配置

  • kubelet设置好后,我们可以用kubeamd init命令拉取相关的docker组件镜像,并启动对应的pods。

    sudo kubeadm init --kubernetes-version=v1.13.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap

    相关参数意思:

    --apiserver-advertise-address:API服务器将通知它正在监听的IP地址,监听的地址为“0.0.0.0”,即本机所有IP地址。

    --apiserver-bind-port:API服务器绑定到的端口。(默认:6443)

    --cert-dir:加载证书的相关目录(默认:/etc/kubernetes/pki)

    --config:配置文件的路径。警告:配置文件目前属于实验性,还不稳定。

    --ignore-preflight-errors:将错误显示为警告的检查列表进行忽略。例如:“IsPrivilegedUser,Swp”。Value 'all'忽略所有检查中的错误。

    --pod-network-cidr:指定pod网络的IP地址范围。如果设置,控制平面将为每个节点自动分配CIDRs。

    --service-cidr:为service VIPs使用不同的IP地址。(默认“10.96.0.0/12”)

  • 第一次运行,因为要在拉取下载相关的镜像,所以可能有点慢,可以预先下载好相关的docker镜像。v.13.4版本的docker镜像下载地址,我的百度云盘链接:https://pan.baidu.com/s/1osvMLNALXBY8FXeN7z3H5Q 提取码:chsq

    sudo docker save k8s.gcr.io/kube-apiserver > kubelet-apiserver.tar 导出镜像

    sudo docker load < kubelet-apiserver.tar 导入镜像

    需要的镜像有:

    k8s.gcr.io/kube-proxy v1.13.4 fadcc5d2b066 4 weeks ago 80.3MB k8s.gcr.io/kube-scheduler v1.13.4 dd862b749309 4 weeks ago 79.6MB k8s.gcr.io/kube-apiserver v1.13.4 fc3801f0fc54 4 weeks ago 181MB k8s.gcr.io/kube-controller-manager v1.13.4 40a817357014 4 weeks ago 146MB k8s.gcr.io/coredns 1.2.6 f59dcacceff4 4 months ago 40MB k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 6 months ago 220MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 15 months ago 742kB

    初始化完成后,会有以下信息

  • 创建kube目录,添加kubectl配置,建议用普通用户运行以下三个命令:

    mkdir -p $HOME/.kube

    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    如没执行以上三个命令,直接查看nodes信息,会报错:

    The connection to the server localhost:8080 was refused - did you specify the right host or port?

    运行后,再次查看nodes信息(kubectl get nodes),会现在master的状态信息是noready,这个是因为缺少附件flannel

  • 添加网络附件flannel

    访问flannel的github:https://github.com/coreos/flannel,此处也有介绍怎么安装

    img

    如果Kubernetes版本是1.7以上执行这行命令即可,在线自动获取部署清单,然后基于此清单下载镜像启动并部署

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

    我们在期间用这些命令看看flannel附件服务是否下载和启动好了:

    docker images

    kubectl get pods --all-namespaces 查看所有名称空间的pods,可以看看flannel的pods是否已经running了

    kubectl get ns 查看有哪些命名空间,其中系统级别的pods都在kube-system中

    至此我们的master就算已经配置完毕了。。。

六、部署notes节点

  1. nodes机器上都要按照第二大步骤(配置好yum源和kubelet),安装kubelet、kubectl、kubeadm和docker-ce

  2. 运行命令:

    sudo kubeadm join 10.0.2.15:6443 --token 9le8zj.k1y8fvr09b4h4pww --discovery-token-ca-cert-hash sha256:10187a814644dab00611161c3079fdeeef579b999c6c506c33ff55dd9bb032fa --ignore-preflight-errors=Swap

    把节点nodes加入,等nodes的机器拉取完镜像后,这个节点就加入完毕了。可以用这个命令查看更多pods的扩展信息:

    kubectl get pods -n kube-system -o wide

  3. 我们在master节点上运行:kubectl get nodes ,可以看到节点已经成功加入

    至此,我们简单的k8s集群已经部署完毕。。。

七、一些有用的命令

  • sudo netstat -ntlp | grep LISTEN 查看监听的端口

  • kubectl get pods -n kube-system -o wide 查看pods的更多扩展信息

  • kubectl get ns 获取所有的命名空间

  • sudo yum list kubelet --showduplicates //查看所有yum包的可用版本

  • kubectl get pods --all-namespaces 查看所有命名空间下的pods

  • 参考链接:https://www.cnblogs.com/pekkle/p/10545145.html

转载于:https://my.oschina.net/u/2394701/blog/3030482

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值