美文网首页docker
Kubernetes (k8s) v1.19.0 安装部署,单机

Kubernetes (k8s) v1.19.0 安装部署,单机

作者: 齐桡 | 来源:发表于2020-08-28 14:42 被阅读0次

    系统准备

    环境准备

    部署集群没有特殊说明均使用root用户执行命令

    硬件信息

    k8s-master 内存16GB 硬盘20GB k8s 控制节点 + Node节点

    软件信息

    CentOS Linux release 7.6.1810 (Core)

    Kubernetesv1.19.0

    Docker 19.03.12

    修改主机名

    hostnamectl set-hostname k8s-master
    

    关闭防火墙 (仅用于测试,生产请不要使用)

    systemctl disable --now firewalld
    

    禁用swap

    swapoff -a
    sed -i 's/.*swap.*/#&/' /etc/fstab
    

    关闭 SELinux

    setenforce 0
    sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    

    设置系统时区、同步时间

    timedatectl set-timezone Asia/Shanghai
    systemctl enable --now chronyd
    # 将当前的 UTC 时间写入硬件时钟
    timedatectl set-local-rtc 0
    # 重启依赖于系统时间的服务
    systemctl restart rsyslog && systemctl restart crond
    

    部署docker

    添加docker yum源

    # 安装必要依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 添加aliyun docker-ce yum源
    yum -y install yum-utils
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 重建yum缓存
    yum makecache fast
    安装指定版本docker
    yum install -y docker-ce-19.03.12-3.el7
    

    确保网络模块开机自动加载

    lsmod | grep overlay
    lsmod | grep br_netfilter
    

    若上面命令无返回值输出或提示文件不存在,需执行以下命令:

    cat > /etc/modules-load.d/docker.conf <<EOF
    overlay
    br_netfilter
    EOF
    modprobe overlay
    modprobe br_netfilter
    

    使桥接流量对iptables可见

    cat > /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    sysctl --system
    

    验证是否生效,均返回 1 即正确

    sysctl -n net.bridge.bridge-nf-call-iptables
    sysctl -n net.bridge.bridge-nf-call-ip6tables
    

    配置docker

    mkdir /etc/docker
    #修改cgroup驱动为systemd[k8s官方推荐]、限制容器日志量、修改存储类型,最后的docker家目录可修改
    cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "storage-opts": [
        "overlay2.override_kernel_check=true"
      ],
      "registry-mirrors": ["https://7uuu3esz.mirror.aliyuncs.com"],
      "data-root": "/data/docker"
    }
    EOF
    #添加开机自启,立即启动
    systemctl enable --now docker
    systemctl daemon-reload
    systemctl restart docker
    

    部署kubernetes

    添加kubernetes源

    cat > /etc/yum.repos.d/kubernetes.repo <<EOF
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    #重建yum缓存,输入y添加证书认证
    yum makecache fast
    

    查看安装版本

    yum list |grep kubelet
    yum list |grep  kubeadm
    yum list |grep  kubectl
    

    安装kubeadm、kubelet、kubectl

    yum install -y kubelet-1.19.0-0 --disableexcludes=kubernetes
    yum install -y kubeadm-1.19.0-0 --disableexcludes=kubernetes
    yum install -y kubectl-1.19.0-0 --disableexcludes=kubernetes
    systemctl enable --now kubelet
    

    配置自动补全命令

    #安装bash自动补全插件
    yum install bash-completion -y
    #设置kubectl与kubeadm命令补全,下次login生效
    kubectl completion bash >/etc/bash_completion.d/kubectl
    kubeadm completion bash > /etc/bash_completion.d/kubeadm
    

    预拉取kubernetes镜像

    kubeadm config images list --kubernetes-version v1.19.0
    

    新建脚本get-k8s-images.sh,内容如下:

    #!/bin/bash
    # Script For Quick Pull K8S Docker Images
    # by qiraosky <qiraosky@qq.com>
    
    KUBE_VERSION=v1.19.0
    PAUSE_VERSION=3.2
    CORE_DNS_VERSION=1.7.0
    ETCD_VERSION=3.4.9-1
    
    # pull kubernetes images from hub.docker.com
    docker pull kubesphere/kube-proxy-amd64:$KUBE_VERSION
    docker pull kubesphere/kube-controller-manager-amd64:$KUBE_VERSION
    docker pull kubesphere/kube-apiserver-amd64:$KUBE_VERSION
    docker pull kubesphere/kube-scheduler-amd64:$KUBE_VERSION
    # pull aliyuncs mirror docker images
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
    docker pull quay.io/coreos/flannel:v0.12.0-arm64
    docker pull quay.io/coreos/flannel:v0.12.0-amd64
    
    # retag to k8s.gcr.io prefix
    docker tag kubesphere/kube-proxy-amd64:$KUBE_VERSION  k8s.gcr.io/kube-proxy:$KUBE_VERSION
    docker tag kubesphere/kube-controller-manager-amd64:$KUBE_VERSION k8s.gcr.io/kube-controller-manager:$KUBE_VERSION
    docker tag kubesphere/kube-apiserver-amd64:$KUBE_VERSION k8s.gcr.io/kube-apiserver:$KUBE_VERSION
    docker tag kubesphere/kube-scheduler-amd64:$KUBE_VERSION k8s.gcr.io/kube-scheduler:$KUBE_VERSION
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION k8s.gcr.io/coredns:$CORE_DNS_VERSION
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION
    
    # untag origin tag, the images won't be delete.
    docker rmi kubesphere/kube-proxy-amd64:$KUBE_VERSION
    docker rmi kubesphere/kube-controller-manager-amd64:$KUBE_VERSION
    docker rmi kubesphere/kube-apiserver-amd64:$KUBE_VERSION
    docker rmi kubesphere/kube-scheduler-amd64:$KUBE_VERSION
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION
    

    脚本添加可执行权限,执行脚本拉取镜像:

    chmod +x get-k8s-images.sh
    ./get-k8s-images.sh
    

    初始化kube-master

    修改kubelet配置默认cgroup driver

    mkdir -p /var/lib/kubelet/
    cat > /var/lib/kubelet/config.yaml <<EOF
    apiVersion: kubelet.config.k8s.io/v1beta1
    kind: KubeletConfiguration
    cgroupDriver: systemd
    EOF
    systemctl restart kubelet
    

    测试环境是否正常(WARNING是正常的)

    kubeadm init phase preflight
    

    初始化master 10.244.0.0/16是flannel固定使用的IP段,设置取决于网络组件要求

    kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.19.0
    

    配置master认证

    echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> /etc/profile
    source /etc/profile
    

    安装网络组件flannel

    # 注意这里下载kubectl apply -f kube-flannel.yaml需要科学上网
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
    kubectl apply -f kube-flannel.yaml
    

    查看kube-master节点状态

    kubectl get nodes
    

    如果长时间达不到 ready 可以查看所有pod 状态

    kubectl get pods --all-namespaces
    

    如果有pod有异常,可以查看描述以解决异常

    kubectl -n kube-system describe  pod-id
    

    Kubernetes 将Pod调度到Master节点(单机运行K8S)去除 master 的污点
    出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。如果希望将k8s-master也当作Node使用,可以执行如下命令:

    kubectl taint node k8s-master node-role.kubernetes.io/master-
    

    其中k8s-master是主机节点hostname如果要恢复Master Only状态,执行如下命令:

    kubectl taint node k8s-master node-role.kubernetes.io/master=""
    

    相关文章

      网友评论

        本文标题:Kubernetes (k8s) v1.19.0 安装部署,单机

        本文链接:https://www.haomeiwen.com/subject/unjlsktx.html