• k8s的安装部署,详细过程展示(保姆级安装教程)


    k8s应用部署方式演变

    在部署应用程序的方式上,主要经历了三个时代:

    传统部署:互联网早期,会直接将应用程序部署在物理机上

    优点:简单,不需要其它技术的参与

    缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响

    虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境

    优点:程序环境不会相互产生影响,提供了一定程度的安全性

    缺点:增加了操作系统,浪费了部分资源

    容器化部署:与虚拟化类似,但是共享了操作系统

    优点:

    可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等

    运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦

    容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署

    在这里插入图片描述

    容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

    一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
    当并发访问量变大的时候,怎么样做到横向扩展容器数量
    这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

    Swarm:Docker自己的容器编排工具
    Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用
    Kubernetes:Google开源的的容器编排工具

    在这里插入图片描述

    关于k8s的知识我就不赘述了,这次主要实践k8s的安装部署

    开始实验

    实验环境:

    主机 IP 系统 角色
    153 192.168.121.153 centos7 master

    154 192.168.121.154 centos7 node

    155 192.168.121.155 centos7 node

    !!!系统一定要2核或者以上,最少要求2核,内存2G或以上

    首先在

    三台机子都安装docker

    sudo yum install -y yum-utils
    sudo yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
    yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
    cat > /etc/docker/daemon.json << EOF
    {"registry-mirrors":["https://hub-mirror.c.163.com/"]}
    EOF
    systemctl start docker
    systemctl enable docker.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    校正时间同步

    timedatectl set-timezone Asia/Shanghai
    yum install -y ntpdate、
    ntpdate   ntp.aliyun.com
    timedatectl set-local-rtc 0
    
    • 1
    • 2
    • 3
    • 4

    配置计划任务自动校正时间(可选,实验环境而已不做也没什么影响)

    # crontab  -e    ---配置计划任务
    01 */2 * * *  ntpdata   npt.aliyun.com
    
    # systemctl  restart crond.service
    
    • 1
    • 2
    • 3
    • 4

    配置A记录互相解析

    cat >>  /etc/hosts  << EOF
    192.168.121.153 server153
    192.168.121.154 server154
    192.168.121.155 server155
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5

    关闭防火墙

    iptables -F
    systemctl  stop firewalld
    systemctl disable firewalld
    setenforce  0
    sed -i  '/SELINUX=/c\SELINUX=disabled/'  /etc/selinux/config
    
    • 1
    • 2
    • 3
    • 4
    • 5

    关闭swap分区,否则会影响k8s的性能

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

    设置内核及相关网络参数

    modprobe   br_netfilter
    modprobe  overlay
    modprobe  ip_vs
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    ip_vs
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    net.ipv4.tcp_tw_recycle=0
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_instances=8192
    fs.inotify.max_user_watches=1048576
    fs.file-max=52706963
    fs.nr_open=52706963
    net.ipv6.conf.all.disable_ipv6=1
    net.netfilter.nf_conntrack_max=2310720
    EOF
    sysctl -p /etc/sysctl.d/k8s.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    然后制作k8s的阿里源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [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 clean  all
    yum makecache fast
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    然后获取cri-docker安装包

    wget https://github.com/Mirantis/cri-dockerd
    
    • 1

    安装git和go语言编译环境

    yum install -y go  git
    
    • 1

    然后解压cri-docker并编译

    tar -xf cri-dockerd.tar.gz
    cd cri-dockerd/
    make cri-dockerd
    
    • 1
    • 2
    • 3

    将 应用程序拷贝到PATH 环境下

    install -o root -g root -m 0755 cri-dockerd    /usr/bin/cri-dockerd
    
    • 1

    安装 cri-dockerd 服务 systemd service控制文件

    install packaging/systemd/*     /usr/lib/systemd/system/
    
    • 1

    配置systemd service文件

    cat > /usr/lib/systemd/system/cri-docker.service << EOF               
    [Unit]
    Description=CRI Interface for Docker Application Container Engine
    Documentation=https://docs.mirantis.com
    After=network-online.target firewalld.service docker.service
    Wants=network-online.target
    Requires=cri-docker.socket
    [Service]
    Type=notify
    ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
    ExecReload=/bin/kill -s HUP 
    TimeoutSec=0
    RestartSec=2
    Restart=always
    StartLimitBurst=3
    StartLimitInterval=60s
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    TasksMax=infinity
    Delegate=yes
    KillMode=process
    [Install]
    WantedBy=multi-user.target
    EOF
    
    • 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

    配置cri-docker.sockrt

    cat > /usr/lib/systemd/system/cri-docker.socket  << EOF 
    [Unit]
    Description=CRI Docker Socket for the API
    PartOf=cri-docker.service
    
    [Socket]
    ListenStream=%t/cri-dockerd.sock
    SocketMode=0660
    SocketUser=root
    SocketGroup=root
    
    [Install]
    WantedBy=sockets.target
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    加载配置文件,启动cri-docker

    systemctl  daemon-reload
    systemctl  start     cri-docker.service
    systemctl  enable  cri-docker.service
    
    • 1
    • 2
    • 3

    查看套接字文件是否启动

    ls /var/run/cri-dockerd.sock
    
    • 1

    然后安装kubelet和kubeadm,用来连接API

    yum install  kubelet-1.26.3  kubeadm-1.26.3 -y
    
    • 1

    三个节点都做相同的配置到这里就可以了

    主节点的配置

    然后到master节点的配置

    下载kubectl

    yum install kubectl-1.26.3
    
    • 1

    查看初始集群所需要的镜像

    [root@server153 cri-dockerd]# kubeadm  config  images  list
    I1107 20:01:31.050004    7050 version.go:256] remote version is much newer: v1.28.3; falling back to: stable-1.26
    registry.k8s.io/kube-apiserver:v1.26.10
    registry.k8s.io/kube-controller-manager:v1.26.10
    registry.k8s.io/kube-scheduler:v1.26.10
    registry.k8s.io/kube-proxy:v1.26.10
    registry.k8s.io/pause:3.9
    registry.k8s.io/etcd:3.5.6-0
    registry.k8s.io/coredns/coredns:v1.9.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    查看镜像是因为官方站点在国外,有时候网络不好不一定能下,所以可以切换阿里源镜像,或者准备好镜像在自己的镜像仓库

    然后开始初始化集群

    [root@server153 cri-dockerd]# kubeadm  init  --apiserver-advertise-address=192.168.121.153  --kubernetes-version=v1.26.3  --image-repository  registry.aliyuncs.com/google_containers  --cri-socket unix:///var/run/cri-dockerd.sock  --service-cidr=10.1.0.0/16 --pod-network-cidr=10.2.0.0/16 --token-ttl=0
    
    • 1

    初始化好后结尾会如下提示

    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    Alternatively, if you are the root user, you can run:
    
      export KUBECONFIG=/etc/kubernetes/admin.conf
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后执行下面两段代码

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    
    • 1
    • 2
    • 3
    • 4
    export KUBECONFIG=/etc/kubernetes/admin.conf
    
    • 1

    还有这段token也记得复制

    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.121.153:6443 --token 3n3vlb.vpgsgfh6vf77tup0 \
    	--discovery-token-ca-cert-hash sha256:c383079099cf763acc2631705cb7361d06e2156dd496ba35b348bfa03e230c36 
    
    • 1
    • 2
    • 3
    • 4

    这段是node节点加入到集群的口令

    做好上面这些之后最好重新连接一下会话,刷新配置

    然后去node节点加入到集群 ,用刚才我们复制的口令加入集群
    只需要执行下面这段命令就可以了

    [root@server154 cri-dockerd]# kubeadm join 192.168.121.153:6443 --token 3n3vlb.vpgsgfh6vf77tup0 --discovery-token-ca-cert-hash sha256:c383079099cf763acc2631705cb7361d06e2156dd496ba35b348bfa03e230c36 --cri-socket unix:///var/run/cri-dockerd.sock
    
    • 1

    加入成功后会有下面字段的提示

    This node has joined the cluster:
    * Certificate signing request was sent to apiserver and a response was received.
    * The Kubelet was informed of the new secure connection details.
    
    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后我们就去master节点执行kubectl get nodes查看集群

    [root@server153 cri-dockerd]# kubectl get nodes
    NAME        STATUS     ROLES           AGE     VERSION
    server153   NotReady   control-plane   8m20s   v1.26.3
    server154   NotReady   <none>          2m2s    v1.26.3
    server155   NotReady   <none>          98s     v1.26.3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    可以看到集群加入成功

    但是还有一个问题,那就是网络还没配置,所以状态才会显示NotReady

    我们下载flannel,这里注意一个问题

    因为是从github下载的,国内网络你们懂的,不一定能拉下载,只能多试几下或者网络好点再下

    [root@server153 cri-dockerd]# cd   /etc/kubernetes/manifests
    [root@server153 manifests]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
    
    • 1
    • 2

    查看我们所需的镜像,等下也是要拉镜像的

    [root@server153 manifests]# grep  "image:"  kube-flannel.yml
            image: docker.io/flannel/flannel:v0.23.0
            image: docker.io/flannel/flannel-cni-plugin:v1.2.0
            image: docker.io/flannel/flannel:v0.23.0
    
    • 1
    • 2
    • 3
    • 4

    然后修改配置文件,改两个地方

    [root@server153 manifests]# vim kube-flannel.yml
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    修改好以后就可以部署组件了

    [root@server153 manifests]# kubectl apply  -f kube-flannel.yml
    
    • 1

    然后再查看集群状态

    这个等待过程可能是比较久的,因为去国外站点拉镜像是有很慢的,看网络情况的

    [root@server153 manifests]# kubectl get nodes
    NAME        STATUS     ROLES           AGE   VERSION
    server153   NotReady   control-plane   39m   v1.26.3
    server154   NotReady   <none>          33m   v1.26.3
    server155   NotReady   <none>          33m   v1.26.3
    [root@server153 manifests]# kubectl get nodes
    NAME        STATUS   ROLES           AGE   VERSION
    server153   Ready    control-plane   42m   v1.26.3
    server154   Ready    <none>          36m   v1.26.3
    server155   Ready    <none>          35m   v1.26.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    然后这样我们的k8s集群就部署好了,当然这个是单master节点的,不是高可用集群的

    希望对大家有帮助。

  • 相关阅读:
    C++实现的动态规划求解分解为若干素数之和的方案总数
    硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文
    L1-071 前世档案(Python3)
    JavaScript Continue语句
    Excel 语法
    [南京大学]-[软件分析]课程学习笔记(二)-IR
    概率论的学习和整理9:0-1分支 和 二项分布
    服务端技术方案模板参考
    python pip安装第三方包速度慢,这篇博客给你安排清楚了
    C++设计模式-创建型设计模式:抽象工厂
  • 原文地址:https://blog.csdn.net/m0_58833554/article/details/134340098