• kubernetes部署


    1 环境规划

    1.1 服务规划

    主机IP配置角色
    k8s-master192.168.0.1274C8Gk8s集群master节点
    k8s-node1192.168.0.654C8Gk8s集群worker节点
    k8s-node2192.168.0.1284C8Gk8s集群worker节点

    1.2 版本说明

    资源版本信息
    服务器操作系统CentOS Linux release 7.9.2009 (Core)
    服务器内核3.10.0-1160.59.1.el7.x86_64
    kubernetes版本v1.19.6
    docker版本19.03.15

    2 kubernetes部署

    2.1 服务器初始化

    2.1.1 关闭防火墙、selinux、swap

    -- 关闭防火墙自启
    systemctl stop firewalld 
    systemctl disable firewalld 
    
    -- 关闭selinux
    setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config
    
    -- 关闭swap
    swapoff -a 
    sed -ri 's/.swap./#&/' /etc/fstab
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.1.2 修改主机名

    -- 分别在各个服务上按照服务器规划设置主机名
    hostnamectl set-hostname k8s-master
    hostnamectl set-hostname k8s-node1
    hostnamectl set-hostname k8s-node2
    
    -- 配置host文件
    cat >> /etc/hosts << EOF
    192.168.0.127 k8s-master
    192.168.0.65 k8s-node1
    192.168.0.128 k8s-node2
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 k8s环境初始化

    以下初始化环境需要在集群各个节点执行。

    2.2.1 安装docker

    在v1.20之前,kubernetes依赖docker的容器运行时,来负责进行容器镜像拉取,所以需要提前安装对应支持的docker版本。在v1.20之后,kubernetes为了解决docker整个运行容器链路的冗长性,选择弃用了docker,转而采用了 Container Runtime Interface (CRI) 来替代容器的运行时,使用containerd 、CRI-O 来兼容对容器的运行时,极大的简化了容器运行时的链路。

    -- 这里kubernetes是1.19,默认的容器仍然是docker
    -- 安装docker环境的依赖包
    # yum install -y yum-utils device-mapper-persistent-data lvm2 containerd
    
    -- 设置docker源
    # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    或者
    # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    -- 安装docker19.03.15
    # yum list docker-ce --showduplicates | sort -r|grep 19.03
    # yum install -y docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7
    
    -- 查看安装的版本
    # docker -v
    Docker version 19.03.15, build 99e3ed8919
    
    -- 修改docker的从group driver
    1. 启动docker
    # systemctl start docker
    
    2. 查看docker driver
    # docker info|grep Cgroup
    Cgroup Driver: cgroupfs
    
    3. 修改docker driver
    # vim /etc/docker/daemon.json  # 修改或创建
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    -- 设置docker开机自启
    systemctl restart docker
    systemctl enable docker
    systemctl status 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
    • 33
    • 34
    • 35

    2.2.2 安装kubeadm、kubelet、kubectl

    -- 设置k8s的yum源
    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
    
    -- 安装kubernetes1.19.6
    yum list -y kubeadm --showduplicates|grep 1.19
    
    yum install -y kubeadm-1.19.6-0 kubectl-1.19.6-0 kubelet-1.19.6-0
    
    -- 查看版本
    kubeadm version
    kubeadm version: &version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.6", GitCommit:"fbf646b339dc52336b55d8ec85c181981b86331a", GitTreeState:"clean", BuildDate:"2020-12-18T12:07:25Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2.3 部署master节点

    以下所有步骤均是在master节点操作。

    2.3.1执行kubeadm init进行初始化

    # kubeadm init --kubernetes-version=v1.19.6 \
    --apiserver-advertise-address=192.168.0.127 \              # apiserver地址,即master节点ip
    --service-cidr=10.1.0.0/16 \                               # service IP 网段
    --pod-network-cidr=10.244.0.0/16 \                         # pod IP 网段
    --image-repository=registry.aliyuncs.com/google_containers
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在初始化这一流程中,主要进行了一下工作:

    • [preflight]:kubeadm 执行初始化前的检查。
    • [certificates]:生成相关的各种token和证书
    • [kubelet-start]:生成kubelet的配置文件"/var/lib/kubelet/config.yaml"
    • [kubeconfig]:生成 KubeConfig 文件,kubelet 需要这个文件与 Master 通信
    • [control-plane]:安装 Master 组件,会从指定的 Registry 下载组件的 Docker 镜像
    • [bootstraptoken]:生成token记录下来,后边使用kubeadm join往集群中添加节点时会用到
    • [addons]:安装附加组件 kube-proxy 和 kube-dns。 Kubernetes Master 初始化成功,提示如何配置常规用户使用kubectl访问集群。 提示如何安装 Pod 网络。 提示如何注册其他节点到 Cluster

    2.3.2 配置kubectl

    -- 新建kubect的配置目录
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config
    
    -- 启用 kubectl 命令自动补全功能
    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
    kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
    echo 'source <(kubectl completion bash)' >> ~/.bashrc
    source ~/.bashrc
    
    -- 设置kubelet自启
    systemctl enable kubelet 
    systemctl status kubelet
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    此时如果我们通过kubectl get all -n kube-system ,可以发现coredns相关的pod处于pending状态,这是由于我们的集群master节点还未安装相关的网络插件。

    2.3.3 安装网络插件

    -- 安装flannel网络插件
    # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    # kubectl apply -f kube-flannel.yml
    
    
    • 1
    • 2
    • 3
    • 4

    如果无法访问,可以直接下载代码仓库https://github.com/coreos/flannel,将kube-flannel.yml上传到k8s-master节点需要能访问quay.io,不然就需要换其他的源,然后执行 kubectl apply

    2.4 部署worker节点

    2.4.1 worker节点加入

    -- 在集群master节点查看集群节点添加命令
    # kubeadm token create --print-join-command
    kubeadm join 192.168.0.127:6443 --token 2yus3o.5s5b8bb466zmkbza     --discovery-token-ca-cert-hash sha256:856f54dff402531039bd138523262a45ff20d7a668ef01121b90bb7e83f59d1b 
    
    -- 在worker节点执行集群节点加入命令
    # kubeadm join 192.168.0.127:6443 --token 2yus3o.5s5b8bb466zmkbza     --discovery-token-ca-cert-hash sha256:856f54dff402531039bd138523262a45ff20d7a668ef01121b90bb7e83f59d1b 
    
    
    -- 查看集群状态
    # kubectl get nodes 
    NAME         STATUS   ROLES    AGE   VERSION
    k8s-master   Ready    master   22h   v1.19.6
    k8s-node1    Ready       21h   v1.19.6
    k8s-node2    Ready       21h   v1.19.6
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    docker-pinpoint-docker链路追踪
    力扣每日一题:最接近目标价格的甜点成【dfs 暴力搜索】
    PostgreSQL SQL/MED
    JNI 使用案例详解(一)
    debug技巧之本地调试
    解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)
    【Bootstrap】布局容器和栅格网络
    【Linux】深刻理解进程概念、进程状态、进程常用指令和系统调用
    21天经典算法之直接选择排序
    Java-Web-Servlet入门1.0
  • 原文地址:https://blog.csdn.net/weixin_37692493/article/details/126333065