文章目录

    • kubeadm
  • 前置要求
  • 部署步骤
  • 环境准备
        • 准备工作
  • linux更改配置操作
  • 安装Docker kubeadm kubelet kubectl
  • 部署 k8s-master
  • 作者声明

kubeadm

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署

1
2
3
4
# 创建一个 Master 节点
$ kubeadm init
# 将一个 Node 节点加入到当前集群中
$ kubeadm join <Master 节点的 IP 和端

前置要求

一台或多台机器,操作系统 CentOS7.x-86_x64
硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止 swap 分区

部署步骤

  1. 在所有节点上安装 Docker 和 kubeadm
  2. 部署 Kubernetes Master
  3. 部署容器网络插件
  4. 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  5. 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源
    在这里插入图片描述

环境准备

准备工作

  • 我们可以使用 vagrant 快速创建三个虚拟机。虚拟机启动前先设置 virtualbox 的主机网
    络。现全部统一为 192.168.56.1,以后所有虚拟机都是 56.x 的 ip 地址
    创建虚拟机的vagrant文件如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Vagrant.configure("2") do |config|
    (1..3).each do |i|
    config.vm.define "k8s-node#{i}" do |node|
    #设置虚拟机的Box
    node.vm.box_url = "https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box"
    node.vm.box="centos/7"

    #设置虚拟机的主机名
    node.vm.hostname="k8s-node#{i}"
    #设置虚拟机的IP
    node.vm.network "private_network",ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

    #VirtaulBox相关配置
    node.vm.provider "virtualbox" do |v|
    v.name="k8s-node#{i}"
    v.memory=4096
    v.cpus=4
    end
    end
    end
    end

配置网络 virtualbox ->管理->主机网络管理器
在这里插入图片描述
最终虚拟机有两个网卡
网卡1真正联网
在这里插入图片描述
网卡2是为了本机连接方便
在这里插入图片描述

在这里插入图片描述

1
2
#切换root用户
su root 密码为 vagrant

在这里插入图片描述

1
2
3
4
#编辑配置
vi /etc/ssh/sshd_config
修改 PasswordAuthentication yes/no
重启服务 service sshd restart
  • 利用xshell进行连接
    ip 192.168.56100-102
    用户名为root
    密码为vagrant

linux更改配置操作

1
2
#查看网卡
ip route show
  • 由于网卡ip一样,所以创建NAT网络网卡
    全局设定->网络->右上角添加

    为每一个结点设置NAT网络
    在这里插入图片描述

  • 测试NAT是否设置成功

    1
    2
    3
    4
    5
    6
    7
    8
    #查看使用的网卡 例如我的是eth0
    #查看每个节点的ip eth0地址
    ip addr
    #互相ping
    ping ip
    #再ping 百度
    ping www.baidu.com
    #如果都ping成功则配置成功
  • 关闭防火墙

    1
    2
    systemctl stop firewalld
    systemctl disable firewalld
  • 关闭linux 安全策略 selinux

    1
    2
    3
    4
    5
    6
    #查看配置
    cat /etc/selinux/config
    #禁用
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    #进全局
    setenforce 0
  • 关闭内存交换 swap

    1
    2
    3
    4
    5
    6
    #临时的
    swapoff -a
    #配置永久的
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    #查看配置
    cat /etc/fstab
  • 添加主机名与 IP 对应关系

    1
    2
    3
    4
    5
    6
    7
    vi /etc/hosts
    10.0.2.15 k8s-node1
    10.0.2.4 k8s-node2
    10.0.2.5 k8s-node3

    指定hostname
    hostnamectl set-hostname <newhostname>:指定新的 hostnam
  • 将桥接的 IPv4 流量传递到 iptables 的链:

    1
    2
    3
    4
    5
    6
    cat > /etc/sysctl.d/k8s.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    #系统应用
    sysctl --system

安装Docker kubeadm kubelet kubectl

  • 安装 docker

    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
    #1. 卸载系统之前的 docker
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
    #2.安装 Docker-CE
    #安装必须的依赖
    sudo yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2
    #设置 docker repo 的 yum 位置
    sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    #安装 docker,以及 docker-cli
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    #3、配置 docker 加速
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://90iechnf.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

    #4、启动 docker & 设置 docker 开机自启
    systemctl enable docker
  • 添加阿里云 yum 源

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cat > /etc/yum.repos.d/kubernetes.repo << EOF
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
  • 安装 kubeadm,kubelet 和 kubectl

    1
    2
    3
    4
    yum list|grep kube
    yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
    systemctl enable kubelet
    systemctl start kubelet

部署 k8s-master

  • master 节点初始化
    将k8s文件夹上传到虚拟机 进入目录 (文件 参考我的gulimall gitee文档下)
    1
    2
    3
    4
    5
    #对master_images.sh修改权限 
    chomd 700 master_images.sh
    #执行下载
    ./master_images.sh
    #检查镜像是否下载完成 docker images

下载完成后进行初始化

1
2
3
4
5
6
7
8
9
10
11
#apiserver-advertise-address=主机上网ip 
#由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动按照我们的 images.sh 先拉取镜像,地址变为 registry.aliyuncs.com/google_containers 也可以。
#pod是最小的部署单元
#service 对pod提供负载均衡 是多个pod的组合

kubeadm init \
--apiserver-advertise-address=10.0.2.15 \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.17.3 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

成功后要执行以下两个步骤
在这里插入图片描述
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌

  1. 测试 kubectl(主节点执行)

    1
    2
    3
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
  2. 安装 Pod 网络插件(CNI)

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

以上地址可能被墙,大家获取上传我们下载好的 flannel.yml 运行即可(参考gulimall gitee 文档),同时 flannel.yml 中

1
2
3
4
#由于制定好了flannel.yml文件所以只需要执行 安装
kubectl apply -f kube-flannel.yml
#删除命令为
kubectl delete -f kube-flannel.yml

指定的 images 访问不到可以去 docker hub 找一个
wget yml 的地址
vi 修改 yml 所有 amd64 的地址都修改了即可。
等待大约 3 分钟

1
2
3
kubectl get ns #查看名称空间
kubectl get pods -n kube-system #查看指定名称空间的 pods
kubectl get pods --all-namespaces #查看所有名称空间的 pods

网络成功状态
在这里插入图片描述

$ ip link set cni0 down 如果网络出现问题,关闭 cni0,重启虚拟机继续测试

  1. 目前 master 状态为 notready。等待网络加入完成即可。
    1
    kubectl get nodes #在master节点获取所有节点

节点状态为ready 再往里加入其他节点
在这里插入图片描述

1
journalctl -u kubelet #查看 kubelet 日志

token两个小时会过期
其他每一个节点加入master 节点

1
2
kubeadm join 10.0.2.15:6443 --token hvlfqz.flbrb9ljn5i2bn3l \
--discovery-token-ca-cert-hash sha256:04e66bbbe8db1c587042128531431388f4a5444a8cbea7bab4d6e64cdce5093a

执行 watch kubectl get pod -n kube-system -o wide 监控 pod 进度
等 3-10 分钟,完全都是 running 以后继续
Ctrl+C退出监控

最终所有节点都变为Ready状态即成功
在这里插入图片描述

作者声明

1
如有问题,欢迎指正!