• 1 k8s组件介绍以及kubeasz二进制安装


    一 k8s组件功能

    1 kube-apiserver

    kube-apiserver | Kubernetes 官方介绍
    API server 提供了k8s各类资源对象的增删改查以及watch等http rest接口。所有其他组件都它进行通信。是集群的统一入口,默认端口为6443

    2 kube-scheduler

    kube-scheduler | Kubernetes 官方介绍
    调度器,负责将pod指派到某个节点上,先排除不符合条件的节点,然后在剩余的节点进行删选,最后选中节点,创建pod.

    3 kube-controller-manager

    kube-controller-manager | Kubernetes 官方介绍
    负责维护集群的状态,比如程序部署,故障检查,自动扩展,滚动更新,确保集群中的pod正常工作

    4 kube-proxy

    kube-proxy | Kubernetes 官方介绍
    运行在每个节点上,监听apiserver中服务对象的变化,再通过iptables或者ipvs实现网络的转发。主要负责集群内部的网络通信

    5 kublet

    kubelet | Kubernetes 官方介绍
    kubelet 是运行在每个node节点上的代理组件,它监视每个node上的pod.
    负责上master汇报node节点的健康状态
    接受指令并在pod中创建docker容器
    准备pod所需的数据卷
    返回pod的运行状态
    在node节点执行容器健康检查

    6 kubectl

    kubectl | Kubernetes
    是集群管理的客户端工具

    7 etcd

    为 Kubernetes 运行 etcd 集群 | Kubernetes
    负责存储集群中各种资源对象信息

    8 dns

    自定义 DNS 服务 | Kubernetes 官方介绍
    负责为整个集群提供dns服务,从而实现服务直接的访问

    二 k8s中创建pod的调度流程

    1.用户使用create/apply yaml创建pod,请求给apiseerver,apiserver将yaml中的属性信息(metadata)写入etcd。
    2.apiserver触发watch机制准备创建pod,信息转发给调度器,调度器使用调度算法选择node,调度器将node信息给apiserver,apiserver_将绑定的node信息写入etcd。
    3.apiserver又通过watch机制,调用kubelet,指定pod信息,触发docker run命 令创建容器。
    4.创建完成之后反馈给kubelet,kubelet又将pod的状态信息给apiserver,apiserver又将pod的状态信息写入etcd。
    5.其中kubectl get pods命令调用的时etcd_的信息。

    三 k8s系统环境准备

    1 环境说明:

    2 master 2etcd 2node 2高可用+harbor
    master01  172.31.7.101
    master02 172.31.7.102
    etcd01 172.31.7.106
    etcd02 172.31.7.107
    node1 172.31.7.111
    node2 172.31.7.112
    ha1 172.31.7.109
    ha2 172.31.7.110
    虚拟vip 172.31.7.188
    
    centos7.9
    k8s.1.23
    docker: docker-19.03.15-binary-install.tar.gz
    

    2 所有服务器进行时间同步

    echo "*/5 * * * * ntpdate time1.aliyun.com &> /dev/null  && hwclock -w" >> /var/spool/cron/crontabs/root
    

    3 系统初始化

    主机名,ip,系统参数优化,seliunx关闭,开启ip转发

    hostnamectl set-hostname k8s-node1
    hostnamectl set-hostname k8s-node2
    hostnamectl set-hostname k8s-etcd1
    hostnamectl set-hostname k8s-etcd2
    hostnamectl set-hostname k8s-master1
    hostnamectl set-hostname k8s-master2
    hostnamectl set-hostname k8s-ha1
    hostnamectl set-hostname k8s-ha2
    
    

    四 高可用服务器安装

    1 安装haproxy,keepalived

    yum install keepalived
    yum install haproxy
    

    2 keepalivd主配置文件如下:

    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
          172.31.7.188 dev ens33 label ens33:1
        }
    }
    
    

    3 启动keepalived

    systemctl enable keepalived
     systemctl start keepalived
    
    

    从配置文件要更改一下权重,还有MASTER变为BACKUP

    然后用ifconfig可以查看vip是否存在。

    4 haproxy配置文件,两台配置一样

    listen k8s_api_nodes_6443
       bind 172.31.7.188:6443
       mode tcp
       server 172.31.7.101 172.31.7.101:6443 check inter 2000 fall 3 rise 5
       server 172.31.7.102 172.31.7.102:6443 check inter 2000 fall 3 rise 5
    
    

    5 启动haproxy

    
    systemctl start haproxy
     systemctl enable haproxy
    

    五 在各个master和node节点 还有harbor上都安装docker

    1 安装docker

    cd /usr/local/src
    tar -zxvf docker-19.03.15-binary-install.tar.gz 
    
      ./docker-install.sh 
    
    

    六 安装harbor并启用https

    1 生成证书

    
    cd /usr/local/src
    mkdir app
    cd app
    tar -zxvf harbor-offline-installer-v2.4.2.tgz 
    # 生成证书
    openssl genrsa -out /usr/local/src/app/harbor/certs/harbor-ca.key
     openssl req -x509 -new -nodes -key ./harbor-ca.key  -subj "/CN=harbor.magedu.local" -days 7120 -out ./harbor-ca.crt
    

    2 更改配置文件

    
    [root@k8s-harbor01 harbor]# pwd
    /usr/local/src/app/harbor
    [root@k8s-harbor01 harbor]# cp harbor.yml.tmpl harbor.yml
    # 配置文件只更改了如下选项,hostname,证书,密码
    grep -v "^#" harbor.yml |grep -v "^$"|grep -v "#"
    hostname: harbor.magedu.local
    http:
      port: 80
    https:
      port: 443
      certificate: /usr/local/src/app/harbor/certs/harbor-ca.crt
      private_key: /usr/local/src/app/harbor/certs/harbor-ca.key
    harbor_admin_password: 123456
    
    

    3 安装

    ./install.sh --with-trivy
    ./install.sh --help 
    运行完之后服务会自动启动
    

    额外补充命令:

    停止命令 docker-compose stop
    启动命令 docker-compose up -d
    删除镜像  docker-compose down --rmi  all
    
    docker-compose down [options]
    
    停止和删除容器、网络、卷、镜像。 选项包括:
    –rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
    -v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
    –remove-orphans,删除服务中没有在compose中定义的容器
    
    

    七 部署docker登录证书

    
     ### 1 部署节点创建这个目录(也就是我的master节点)
     mkdir -p /etc/docker/certs.d/harbor.magedu.local
    # harbor上拷贝证书到部署节点
    [root@k8s-harbor01 harbor]# scp -r /usr/local/src/app/harbor/certs/harbor-ca.crt root@172.31.7.101:/etc/docker/certs.d/harbor.magedu.local
    

    2 添加hosts文件

    [root@k8s-master01 ~]# cat /etc/hosts
    172.31.7.109 harbor.magedu.local
    
    重启docker
    systemctl restart docker
    

    3 登录,并上传镜像

    docker login harbor.magedu.com

    docker pull alpine
    
      docker  tag alpine harbor.magedu.com/library/alpine:mage
    
      docker push harbor.magedu.com/library/alpine:mage
    
    

    效果如图所示:

    八 利用kubeasz进行集群安装

    https://gitee.com/ilanni/kubeasz 版本对比

    1 安装ansible

    yum install epel-release
    yum install ansible
    
    

    2 生成密钥并拷贝到各个节点

    ssh-keygen
    

    拷贝脚本如下:

    #!/bin/bash
    ip="
    172.31.7.102
    172.31.7.111
    172.31.7.112
    172.31.7.106
    172.31.7.107
    "
    for node in ${ip};do
      sshpass -p redhat ssh-copy-id ${node} -o StrictHostKeyChecking=no
      if [ $? -eq 0 ];then
        echo "${node}密钥拷贝完成"
      else
        echo "${node}密钥拷贝失败"
      fi
    done
    
    

    3 下载kubeasz 项目源码

    不同的kubeasz版本,安装的k8s版本也不一样

    # 下载工具脚本ezdown,举例使用kubeasz版本3.0.0
    export release=3.2.0
    wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
    chmod +x ./ezdown
    # 使用工具脚本下载
    ./ezdown -D
    
    

    下载好的脚本包括镜像都存放到了/etc/kubeasz 这个目录

    4 创建集群并生成配置文件

    [root@k8s-master02 kubeasz]# ./ezctl new k8s-cluster01
    2022-04-16 18:40:43 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-cluster01
    2022-04-16 18:40:43 DEBUG set versions
    2022-04-16 18:40:44 DEBUG disable registry mirrors
    2022-04-16 18:40:44 DEBUG cluster k8s-cluster01: files successfully created.
    2022-04-16 18:40:44 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-cluster01/hosts'
    2022-04-16 18:40:44 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-cluster01/config.yml'
    
    
    
    

    5 编辑host文件

    vim /etc/kubeasz/clusters/k8s-cluster01/hosts

    
    [etcd]
    172.31.7.106
    172.31.7.107
    [kube_master]
    172.31.7.101
    172.31.7.102
    [kube_node]
    172.31.7.111
    172.31.7.112
    [harbor]
    [ex_lb]
    172.31.7.109 LB_ROLE=backup EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
    172.31.7.110 LB_ROLE=master EX_APISERVER_VIP=172.31.7.188 EX_APISERVER_PORT=6443
    [chrony]
    [all:vars]
    SECURE_PORT="6443"
    CONTAINER_RUNTIME="docker"
    CLUSTER_NETWORK="calico"
    PROXY_MODE="ipvs"
    SERVICE_CIDR="10.200.0.0/16"
    CLUSTER_CIDR="10.100.0.0/16"
    NODE_PORT_RANGE="30000-65000"
    CLUSTER_DNS_DOMAIN="magedu.local"
    bin_dir="/opt/kube/bin"
    base_dir="/etc/kubeasz"
    cluster_dir="{{ base_dir }}/clusters/k8s-cluster01"
    ca_dir="/etc/kubernetes/ssl"
    
    

    6 编辑config.yml

    改证书时间
    改k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)

    改node节点最大的pod数量
    改harbor信任的节点,只针对http的,https不用配置
    改calico ,默认就可以
    改dns缓存,默认是true,线上环境可以是true

    7 安装

    ./ezctl setup k8s-cluster01 01   #第一步
    ./ezctl setup k8s-cluster01 02
    ./ezctl setup k8s-cluster01 03
    ./ezctl setup k8s-cluster01 04
    ./ezctl setup k8s-cluster01 05
    ./ezctl setup k8s-cluster01 06
    
    

    查看 节点的状态

    8 验证calico

    /opt/kube/bin/calicoctl node status
    

    在master上查看网络,只能查看到node节点的,我这里只有一台node

    在node节点上查看,只能看到master节点的

    9 测试网络

    用centos或者busybox都可以

    kubectl  run net-test1 --image=centos:7.9.2009 sleep 3600000
    kubectl  run net-test2 --image=centos:7.9.2009 sleep 3600000
    kubectl run test --image=busybox sleep 30000
    
    

    进入这两个pod之中,然后互相ping一下ip,看是否可以通信

  • 相关阅读:
    接触C# 反射
    未能找出类型或命名空间名称“T” 问题的解决方案
    Win7 文件加密存储操作后,如何在事后备份证书、秘钥
    [转] SQL SERVER 2008 R2 安装中的账户设置问题
    centos6.5+Django+mysql+nginx+uwsgi
    JAVA解决大数
    STL algorithm算法min,min_element(35)
    Java中间MD5加密算法完整版
    IP地址和子网掩码
    加州理工大学公开课:机器学习与数据挖掘_线性模型 II(第IX类)
  • 原文地址:https://www.cnblogs.com/huningfei/p/16158424.html
Copyright © 2020-2023  润新知