• kubernetes部署安装


    kubernetes安装部署

    环境规划

    集群类型

    kubernetes集群类型主要分为一主多从,以及多主多从两种类型

    • 一主多从:一个master对应多个node节点,部署简单但是容易出现单机故障,主要用于测试环境
    • 多主多从:多台master多个node节点,部署繁琐,安全性高,主要用于生产环境

    image-20210925234707008

    K8S安装方式

    kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包。

    • kubeadm:快速搭建kubernetes集群工具
    • minikube:快速搭建单节点kubernetes工具
    • 二进制包:从官网上下载每个组件二进制包,安装麻烦,但是对理解kubernetes更加有效

    环境规划

    主机名称 角色 IP 操作系统 硬件资源
    master master 10.1.1.2 CenTOS7.6+ 2G
    node1 node1 10.1.1.3 CenTOS7.6+ 2G
    node2 node2 10.1.1.4 CenTOS7.6+ 2G

    PS:虚拟机内存最好2G起步,亲测1G环境K8S无法完成初始化,2G即可

    环境搭建

    版本选择

    Docker kuberadm kubectl kubelet
    18.06.3 1.18.0 1.18.0 1.18.0

    环境初始化

    关闭安全策略

    # 默认三台服务器都关闭此处只演示master
    
    # 关闭防火墙
    systemctl stop firewalld && systemctl disable firewalld
    
    # 关闭selinux需要重启
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    

    DNS解析

    # 默认三台服务器都关闭此处只演示master
    
    cat >> /etc/hosts << EOF
    10.1.1.2 master
    10.1.1.3 node1
    10.1.1.4 node2
    EOF
    

    时间同步

    # K8S要求节点之间时间必须一致 因此配置时间同步
    # 默认三台服务器都关闭此处只演示master
    
    # 安装ntpdate
    yum install ntpdate -y
    
    # 开启ntpdate
    systemctl start ntpdate.service && systemctl enable ntpdate.service
    
    # 时间同步阿里云
    ntpdate ntp1.aliyun.com
    
    # 系统时间同步硬件 防止系统重启时间被还原
    hwclock --systohc
    
    # 查看当前时间
    date
    

    关闭Swap分区

    # 关闭swap
    
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    

    添加网桥过滤与地址转发功能

    # 在每个节点上将桥接的IPv4流量传递到iptables的链
    # 默认三台服务器都需要此处只演示master
    cat > /etc/sysctl.d/kubernetes.conf << EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    
    # 加载配置
    sysctl -p
    
    # 加载br_netfilter模块
    modprobe br_netfilter
    
    # 添加开机自启动
    echo modprobe br_netfilter >> /etc/rc.d/rc.local && chmod +x /etc/rc.d/rc.local
    
    # 查看是否加载
    lsmod | grep br_netfilter
    

    image-20210926002553123

    开启ipvs

    在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块

    # 默认三台服务器都需要此处只演示master
    
    yum -y install ipset ipvsadm
    
    # 配置ipvs模块
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    
    # 添加权限并且执行
    chmod +x /etc/sysconfig/modules/ipvs.modules && /bin/bash /etc/sysconfig/modules/ipvs.modules
    
    # 查看是否加载
    lsmod | grep -e ipvs -e nf_conntrack_ipv4
    

    image-20210926003405514

    重启

    # 重启
    reboot
    

    安装Docker

    # 默认三台服务器都需要此处只演示master
    
    # 安装docker网络源
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    # 安装docker
    yum -y install docker-ce-18.06.3.ce-3.el7
    
    # 启动docker
    systemctl enable docker && systemctl start docker
    
    # 配置docker仓库源
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "exec-opts": ["native.cgroupdriver=systemd"], 
      "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], 
      "live-restore": true,
      "log-driver":"json-file",
      "log-opts": {"max-size":"500m", "max-file":"3"}
    }
    EOF
    
    # 加载配置
    systemctl daemon-reload
    
    # 重启docker
    sudo systemctl restart docker
    
    # 查看docker信息
    docker info
    

    安装kubeadm/kubelet/kubectl

    # 默认三台服务器都需要此处只演示master
    
    # 由于kubernetes的镜像源在国外,非常慢,这里切换成国内的阿里云镜像源
    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
    
    # 指定版本号部署
    yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
    
    # 为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致 修改"/etc/sysconfig/kubelet"文件的内容:
    cat > /etc/sysconfig/kubelet << EOF
    KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
    KUBE_PROXY_MODE="ipvs"
    EOF
    
    # 配置开机启动 由于没有生成配置文件,集群初始化后自动启动
    systemctl enable kubelet
    

    安装K8S

    查看并且拉取镜像

    # 查看所需要镜像
    kubeadm config images list
    
    # 由于K8S下载初始化镜像很慢 提前下载镜像 三台机器都需要做
    IMAGES=(
    kube-apiserver:v1.17.4
    kube-controller-manager:v1.17.4
    kube-scheduler:v1.17.4
    kube-proxy:v1.17.4
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
    )
    
    for iname in ${IMAGES[@]};do
            docker pull registry.aliyuncs.com/google_containers/$iname
            docker tag registry.aliyuncs.com/google_containers/$iname k8s.gcr.io/$iname
            docker rmi registry.aliyuncs.com/google_containers/$iname
    done
    

    image-20210926085805565

    部署master节点

    # 部署K8S的master节点
    
    # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址
    kubeadm init 
      --apiserver-advertise-address=10.1.1.2 
      --image-repository registry.aliyuncs.com/google_containers 
      --kubernetes-version v1.18.0 
      --service-cidr=10.96.0.0/12 
      --pod-network-cidr=10.244.0.0/16
    

    image-20210926130308481

    # 根据上述指示创建文件
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    部署node节点

    # node加入master节点
    kubeadm join 10.1.1.2:6443 --token 5fbide.ray0096zdgq5gq0i 
        --discovery-token-ca-cert-hash sha256:b4261ad42ed9a9f164c26eaaf0e5948c0b1b3fc5cd679e448553427331d43a8d 
    
    # master节点查看node
    [root@master ~]# kubectl get nodes
    

    image-20210926130825653

    部署网络

    kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel

    # 只需要在master节点执行即可
    # 下载配置文件 如果下载失败可以手动下载
    [root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
     
    # 修改网络镜像源
    #这个镜像源不稳定 如果网络比较好的话建议不更换就默认国外地址即可
    [root@master ~]# sed  -i  's/quay.io/quay-mirror.qiniu.com/g'   kube-flannel.yml
    
    # 安装网络插件
    [root@master ~]# kubectl apply -f kube-flannel.yml
    
    # 查看节点信息与健康状态
    [root@master ~]# kubectl get nodes,cs
    

    image-20210926170027393

    # 查看集群信息
    [root@master ~]# kubectl cluster-info
    

    image-20210926170408198

    安装Nginx

    # master节点安装nginx测试K8S集群是否对外提供服务
    
    # 添加nginx
    kubectl create deployment nginx --image=nginx:1.14-alpine
    
    # 暴露端口
    kubectl expose deployment nginx --port=80 --type=NodePort
    
    # 查看服务状态
    kubectl get pods,svc
    

    image-20210926171246136

    # 访问测试关联上述暴露端口
    [root@master ~]# curl 127.0.0.1:30378
    

    image-20210926171427439

    配置kubectl命令自动补全

    # 安装自动补全
    yum install -y bash-completion
    
    # 添加环境变量
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    
    # 加载配置
    source ~/.bashrc
    
  • 相关阅读:
    Design a stack that supports getMin() in O(1) time and O(1) extra space
    Python的sys.argv用法
    数据库系统概论学习4-SQL 语句和关系代数(二)单表查询
    数据库系统概论学习3-SQL 语句和关系代数(一)SQL 入门
    数据库系统概论学习2-《关系数据库与 E/R 模型》
    MySQL实验1: 新建一个名为 library 的数据库,包含 book、reader 两张表,根据自己的理解安排表的内容并插入数据。
    如何在Eclipse环境下安装PyDev并成功运行Python3.6代码
    模型融合之blending和stacking
    Pandas基础用法-数据处理【全】-转
    各种排序算法-用Python实现
  • 原文地址:https://www.cnblogs.com/SR-Program/p/15339129.html
Copyright © 2020-2023  润新知