• 《前端运维》五、k8s--1安装与基本配置


     一、k8s基础概念与安装

      k8s,即kubernetes是用于自动部署,扩展和管理容器化应用程序的开源系统。详细的描述就不多说了,官网有更详细的内容。简单来说,k8s,是一个可以操作多台机器调度部署镜像的平台。在k8s中,可以使用集群来组织服务器。集群中会存在一个master节点,该节点是kubernetes的控制节点,负责调度服务器中被称为Node的其他资源。

      下面,我们就正式开始k8s的学习。

      首先,我们需要两台服务器,一个是master,一个是node。master服务器的配置要稍微高些,2核4G就差不多了,如果不是长时间用的话,可以买按量付费,用完了给它关了就好了。

      购买好服务器后,我们需要给两台服务器预先安装一些依赖工具:

    yum install vim wget ntpdate -y

      vim和wget就不说了,之前的内容也都有使用过,ntpdate是用来同步时区的。然后,我们还需要关闭防火墙,因为k8s会创建防火墙规则:

    systemctl stop firewalld & systemctl disable firewalld

      然后,关闭swap分区,Swap 是 Linux 的交换分区,在系统资源不足时,Swap 分区会启用,这个我们不需要。应该让新创建的服务自动调度到集群的其他 Node 节点中去,而不是使用 Swap 分区。

    #临时关闭
    swapoff -a

      关闭Selinux,这是为了支持容器可以访问宿主机文件系统。

    复制代码
    # 暂时关闭 selinux
    setenforce 0
    
    # 永久关闭
    vi /etc/sysconfig/selinux
    # 修改以下参数,设置为disable
    SELINUX=disabled
    复制代码

      下面我们就需要使用nptdate来统一我们的系统时间和时区,服务器时间与阿里云服务器对齐。

    # 统一时区,为上海时区
    ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    bash -c "echo 'Asia/Shanghai' > /etc/timezone"
    
    # 统一使用阿里服务器进行时间更新
    ntpdate ntp1.aliyun.com

      下一步我们来安装docker:

    复制代码
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install docker-ce -y
    systemctl start docker
    systemctl enable docker
    
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://fwvjnv59.mirror.aliyuncs.com"]
    }
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker.service
    复制代码

      上面的:

    • device-mapper-persistent-data: 存储驱动,Linux上的许多高级卷管理技术
    • lvm: 逻辑卷管理器,用于创建逻辑磁盘分区使用  

      然后,我们来安装kubernetes组件,首先,切换阿里云:

    复制代码
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    复制代码

      然后,安装kubernetes组件:

    yum install -y kubelet kubeadm kubectl
    # 启动kubelet
    systemctl enable kubelet && systemctl start kubelet
    • kubelet 是 Kubernetes 中的核心组件。它会运行在集群的所有节点上,并负责创建启动服务容器
    • kubectl 则是Kubernetes的命令行工具。可以用来管理,删除,创建资源
    • kubeadm 则是用来初始化集群,子节点加入的工具

      最后,我们需要设置一下bridge-nf-call-iptables:

    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

      安装的部分就完成啦。下面我们来配置一些基本内容吧

    二、基本配置

     1)master节点安装

      之前说过,需要两台服务器,一台master,一台node。我们先来安装master服务器的基本依赖。我们首先修改下主机名:

    hostnamectl set-hostname  master

      然后我们来修改下master服务器的host,使两台服务器可以通信:

    ip addr
    vim /etc/hosts
    
    172.31.178.169  master  master

      在上面的文件中,把node服务器的ip添加进去即可。然后我们需要配置下初始文件:

    kubeadm config print init-defaults > init-kubeadm.conf
    vim init-kubeadm.conf

      init-defaults命令,会生成一份初始文件。下面我们需要在init-kubeadm.conf文件中进行一些额外的,必要的更改:

    复制代码
    - imageRepository: k8s.gcr.io 更换k8s镜像仓库
    + imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
    - localAPIEndpointc,advertiseAddress为master ip ,port默认不修改
    localAPIEndpoint:
    + advertiseAddress: 172.31.178.169  # 此处为master的IP
      bindPort: 6443
    # 配置子网络
    networking:
      dnsDomain: cluster.local
      serviceSubnet: 10.96.0.0/12
    + podSubnet: 10.244.0.0/16    # 添加这个
    复制代码

      上面修改的代码修改了镜像仓库为阿里云的,加速组件的拉取,替换ip为自己主机的ip,配置pod网络为flannel网段,后面为了让集群之间可以互相通信,需要配置子网络,这些在后面的flannel网络中会用到。10.96.0.0/12 是Kubernetes内部的网络pods需要的网络。10.244.0.0/16 是Kubernetes内部services需要的网络。

      下面我们就需要拉取一下组件:

    // 查看缺少的组件
    kubeadm config images list --config init-kubeadm.conf
    // 拉取缺少的组件
    kubeadm config images pull --config init-kubeadm.conf

      直接执行这两个命令,就可以查看、拉取缺少的组件了。我们来简单了解下,这些组件都是干什么的:

    • kubeadm 可以用来拉取我们的默认组件镜像
    • kube-apiserver 提供接口服务,可以让外网访问集群
    • kube-controller-manager 内部的控制指令工具
    • kube-scheduler 内部的任务调度器
    • kube-proxy 反向代理和负载均衡,流量转发
    • pause 进程管理工具
    • etcd 保持 集群内部的数据一致性
    • coredns 集群内网通信

      

      我们也可以通过上图,来理解下k8s的运行流程。下面我们来初始化k8s:

    kubeadm init --config init-kubeadm.conf

      然后,我们需要执行的命令内容,k8s做了一部分提示:

    复制代码
    Your Kubernetes control-plane has initialized successfully!
    
    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
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 172.31.178.169:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:8aac19f4dbe68f1e15ba3d80e141acdc912e353f9757ad69187e8fb9780bc975 
    复制代码

      我们根据提示执行就好了。下面我们来安装下flannel,flannel 主要的作用是通过创建一个虚拟网络,让不同节点下的服务有着全局唯一的IP地址,且服务之前可以互相访问和连接。集群内网网络通信协议通信模式采用了Flannel协议:

      

    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    docker pull quay.io/coreos/flannel:v0.13.0-rc2
    kubectl apply -f kube-flannel.yml

      下面我们要修改下net-conf.json文件,把其中的Network网段,配置的跟之前的pod网段一样即可:

    { "Network": "10.244.0.0/16", "Backend": { "Type": "vxlan" } }

      然后我们就可以通过下面的命令查看下启动情况:

    kubectl get nodes

      master节点的配置到这里就基本oK了,下面我们来看下node节点的配置,首先同样的,我们先修改下主机名:

    hostnamectl set-hostname node1

      然后将master节点的配置文件拷贝到node节点:

    scp $HOME/.kube/config root@172.31.178.170:~/

      然后在node节点归档配置文件:

    mkdir -p $HOME/.kube
    sudo mv $HOME/config $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

      然后,把node节点加入到master集群内:

    kubeadm join 172.16.81.164:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:b4a059eeffa2e52f2eea7a5d592be10c994c7715c17bda57bbc3757d4f13903d

      如果刚才的命令丢失,可以在master机器上通过下面的命令重新生成一条命令:

    kubeadm token create --print-join-command

      同样的,我们安装下flannel:

    scp ~/kube-flannel.yml root@172.31.178.170:~/
    kubectl apply -f kube-flannel.yml

      查看下状态:

    kubectl get nodes

      ok,到这里,master节点和node节点的k8s基本配置就完事了,下面我们来安装一些必要的服务器软件。

    三、安装其他服务

      我们先来在master节点安装下nginx:

    kubectl create deployment nginx --image=nginx

      然后:

    kubectl expose deployment nginx --port=80 --type=NodePort

      然后我们扩容几个副本:

    kubectl scale deployment nginx --replicas=3

      nginx好了,下面我们配置下mysql,首先我们创建个mysql.yml文件,添加如下内容:

    复制代码
    apiVersion: v1
    kind: ReplicationController                           
    metadata:
      name: mysql                                          
    spec:
      replicas: 1           #Pod副本的期待数量
      selector:
        app: mysql          #符合目标的Pod拥有此标签
      template:             #根据此模板创建Pod的副本(实例)
        metadata:
          labels:
            app: mysql     #Pod副本拥有的标签,对应RC的Selector
        spec:
          containers:      #Pod内容器的定义部分
          - name: mysql            #容器的名称
            image: mysql    #容器对应的Docker image
            ports: 
            - containerPort: 3306       #容器应用监听的端口号
            env:                        #注入容器内的环境变量
            - name: MYSQL_ROOT_PASSWORD 
              value: "123456"
    复制代码

      然后执行:

    kubectl create -f mysql-rc.yaml

      就创建好了mysql的配置。我们可以看下状态:

    kubectl get pods
    kubectl describe pod mysql

      基本的配置到这里就OK了。我们下期见。

  • 相关阅读:
    这5个AI智能绘画工具真的太强大了,绝对不输Midjourney。
    nginx 反向代理 负载均衡 动静分离
    Unet心电信号分割方法(Pytorch)
    指挥中心实战指挥平台-通信指挥类装备多链路聚合设备解决方案实例
    记录一下:基于nginx配置的封禁真实IP
    开发者专访|我从「人间地狱」的算法岗内卷中,倔强地踏出了一条路 前路漫漫,星芒万里
    寻找数字零售的发展新方向,才是保证数字零售可以进入到全新发展阶段的关键
    ffmpeg的基本功能介绍
    JAVA-中国矿业大学作业-编写程序,将字符串“你好,欢迎来到JAVA世界”对其中的“java“进行截取,输出截取字母和它在字符串中的位置
    【Java 进阶篇】JavaScript 正则表达式(RegExp)详解
  • 原文地址:https://www.cnblogs.com/zaking/p/15135347.html