• 01-安装


    1、安装前准备

    1.1、集群IP分布

    主机名IP地址角色备注
    kube-master192.168.168.60kube-master管理节点
    kube-node1192.168.168.61kube-node计算节点
    kube-node2192.168.168.62kube-node计算节点
    kube-node3192.168.168.63kube-node计算节点
    repo192.168.168.72registryyum安装源,私有仓库

    1.2、修改主机名与本地hosts解析,dns(dns略)

    [root@h60 ~]# echo kube-master > /etc/hostname 
    [root@h61 ~]# echo kube-node1 > /etc/hostname 
    [root@h62 ~]# echo kube-node2 > /etc/hostname 
    [root@h63 ~]# echo kube-node3 > /etc/hostname 
    
    [root@kube-node3 ~]# cat /etc/hosts
    192.168.168.60 kube-master
    192.168.168.61 kube-node1
    192.168.168.62 kube-node2
    192.168.168.63 kube-node3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    1.3、从节点安装docker

    > # 在node1~3上操作
    [root@kube-node3 ~]# yum -y install docker #安装 docker
    [root@kube-node3 ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #开启路由转发
    [root@kube-node3 ~]# sysctl -p #让配置立刻生效
    [root@kube-node3 ~]# systemctl start docker
    [root@kube-node3 ~]# systemctl enable docker
    [root@kube-node3 ~]# systemctl stop/disable firewalld
    [root@kube-node3 ~]# setenforce 0 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.4、配置私有仓库harbor

    2、配置本地镜像源

    2.1、配置本地k8s镜像源

    [root@soft72 localrepo]# pwd
    /var/www/html/localrepo
    
    [root@soft72 localrepo]# ls
    containernetworking-cni-0.6.0-3.el7.x86_64.rpm  kubernetes-kubeadm-1.10.3-0.el7.x86_64.rpm
    etcd-3.3.11-2.el7.centos.x86_64.rpm             kubernetes-master-1.10.3-0.el7.x86_64.rpm
    flannel-0.7.1-4.el7.x86_64.rpm                  kubernetes-node-1.10.3-0.el7.x86_64.rpm
    kubernetes-1.10.3-0.el7.x86_64.rpm              repodata
    kubernetes-client-1.10.3-0.el7.x86_64.rpm
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    ]# cat /etc/yum.repos.d/local-k8s.repo 
    [my-k8s-repo]
    name=my-k8s-repo
    baseurl=http://harbor.soft72.com/localrepo
    enabled=1
    gpgcheck=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2、master与node镜像源如下

    [root@kube-master ~]# cat /etc/yum.repos.d/local-k8s.repo 
    [my-k8s-repo]
    name=my-k8s-repo
    baseurl=http://harbor.soft72.com/localrepo
    enabled=1
    gpgcheck=0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3、安装部署kube-master

    3.1、etcd安装配置(master)

    • 安装
    [root@kube-master ~]# yum -y install etcd   #安装 etcd(键值型数据库)
    
    • 1
    • 改配置
    [root@kube-master ~]# vim /etc/etcd/etcd.conf 
    6 ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #修改监听的客户端地址,0.0.0.0 指监听所有的主机
    [root@kube-master ~]# systemctl start etcd.service
    [root@kube-master ~]# systemctl enable etcd.service 
    
    • 1
    • 2
    • 3
    • 4
    • 创建配置网络
    在 etcd 中,创建网络,mk 创建键值对 ——> 创建网络(后面课程配置)
    [root@kube-master ~]# etcdctl mk /atomic.io/network/config '{"Network":"10.254.0.0/16","Backend":{"Type":"vxlan"}}'
    [root@kube-master ~]# etcdctl ls / #查看
    [root@kube-master ~]# etcdctl ls /atomic.io
    [root@kube-master ~]# etcdctl ls /atomic.io/network
    [root@kube-master ~]# etcdctl get /atomic.io/network/config #验证,查看 etcd 中的键值
    对,确认网络配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.2 flannel安装配置(master+node)

    • 安装
    [root@kube-node1 ~]# yum -y install flannel
    [root@kube-node1 ~]# vim /etc/sysconfig/flanneld
    4 FLANNEL_ETCD_ENDPOINTS="http://192.168.168.60:2379" #指定etcd
    >#  etcd 中已定义了 flannel 网络地址:10.254.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 起服务
    启动服务(flannel 服务必须在 docker 服务之前启动)
    [root@kube-node1 ~]# systemctl stop docker
    [root@kube-node1 ~]# systemctl enable flanneld
    [root@kube-node1 ~]# systemctl start flanneld docker
    
    • 1
    • 2
    • 3
    • 4
    • 查看
    [root@kube-node1 ~]# ifconfig
    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
            inet 10.254.73.1  netmask 255.255.255.0  broadcast 0.0.0.0
            ...
    flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
            inet 10.254.73.0  netmask 255.255.255.255  broadcast 0.0.0.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 测试(node)
    node上新开一个容器,各个节点相互ping,测试flannel网络
    [root@kube-node1 ~]# docker run -d harbor.soft72.com:8080/public/nginx:latest
    [root@kube-node1 ~]# docker inspect -f "{{.NetworkSettings.IPAddress}}" #查看IP
    
    • 1
    • 2
    • 3

    3.3、安装k8s-master

    • 安装
    [root@kube-master ~]# yum list kubernetes-* #检查 k8s 的安装软件包,必须是 1.10.3
    [root@kube-master ~]# yum -y install kubernetes-master kubernetes-client
    
    • 1
    • 2
    [root@kube-master ~]# ls /etc/kubernetes/
    apiserver  config  controller-manager  scheduler
    
    • 1
    • 2
    • 修改 k8s 全局配置文件
    [root@kube-master ~]# vim /etc/kubernetes/config
    22 KUBE_MASTER="--master=http://192.168.168.60:8080" #指定k8s管理节点的IP地址
    (指定 apiserver 的地址)
    
    • 1
    • 2
    • 3
    • 修改 apiserver 配置文件(master 主配置文件)
    [root@kube-master ~]# vim /etc/kubernetes/apiserver
    8 KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" #监听所有地址
    17 KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.168.60:2379"    #指定etcd地址
    20 KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" #k8s集群默认IP端
    23 KUBE_ADMISSION_CONTROL="--admission-control=Namespace
    Lifecycle,LimitRanger,SecurityContextDeny,ResourceQuota" 
    > #定义 k8s 的交互和配置行为,删除 ServiceAccount(通讯的一种机制,使用秘钥认证,需要证书认证),在这里是内网通讯
    > #不涉及安全性问题,所以本次 k8s 不采用证书认证,使用明文即可
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • controller-manager scheduler 使用默认即可
    • 启动
    启动服务,设置三个服务的开机自启动
    [root@kube-master ~]# systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service
    [root@kube-master ~]# systemctl start kube-apiserver.service kube-controller-manager.service kube-scheduler.service
    [root@kube-master ~]# systemctl status kube-apiserver.service kube-controller-manager.service kube-scheduler.service
    
    • 1
    • 2
    • 3
    • 4
    • 验证服务
    [root@kube-master ~]# kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}   
    scheduler            Healthy   ok     
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、安装部署kube-node

    4.1、安装 kube-node

    • 安装
    [root@kube-node1 ~]# yum -y install kubernetes-node
    
    • 1
    • 修改 k8s 全局配置文件
    [root@kube-node1 ~]# vim /etc/kubernetes/config
    22 KUBE_MASTER="--master=http://192.168.168.60:8080" #指定 k8s 管理节点的 IP 地址
    
    • 1
    • 2
    • 修改kubelet配置文件
    [root@kube-node1 ~]# vim /etc/kubernetes/kubelet
    >#  #修改 kubelet 监听地址,监听所有的 IP 地址,
    > 5 KUBELET_ADDRESS="--address=0.0.0.0"
    ># master 在创建容器的时候需要和 kubelet 通讯,需要 IP
    ># 指定本机的主机名,master发现有节点来连接,需要知道节点的名称,才能进行通讯
    > 11 KUBELET_HOSTNAME="--hostname-override=kube-node1" #与本机主机名一致
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    14 KUBELET_ARGS="--cgroup-driver=systemd --fail-swap-on=false 
    --kubeconfig=/etc/kubernetes/kubelet.kubeconfig
    --pod-infra-container-image=harbor.soft72.com:8080/public/pod-infrastructure:latest"  #harbor中镜像地址
    > #kubelet 扩展参数,自定义 kubelet 的子配置文件 kubelet.kubeconfig(使用客户端与服务器进行通讯的
    ># 时候服务器的地址和配置文件),kubelet 是用于监视 pod 的,这里指定被监听的 pod 镜像,kubelet.kubeconfig 是 kubelet 的配置文件的一部分,使用命令生成 kubelet.kubeconfig 文件内容
    ># 设置集群:/etc/kubernetes/kubelet.kubeconfig (默认没有)
    ># 编写 kubelet.kubeconfig 文件,将生成的信息,写入到 kubelet.kubeconfig 文件中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 新建kubelet.kubeconfig文件
    ># 使用命令方式创建
    kubectl config set-cluster local --server="http://192.168.168.60:8080"
    kubectl config set-context --cluster="local" local
    kubectl config set current-context local
    kubectl config view
    cat kubelet.kubeconfig 
    vim kubelet.kubeconfig 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    ># #kubelet.kubeconfig 文件,之前并不存在
    [root@kube-node1 ~]# vim /etc/kubernetes/kubelet.kubeconfig
    apiVersion: v1
    clusters:
    - cluster:
        server: http://192.168.168.60:8080
      name: local
    contexts:
    - context:
        cluster: local
        user: ""
      name: local
    current-context: local
    kind: Config
    preferences: {}
    users: []
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 上传 pod-infrastructure到harbor
    • 起服务
    [root@kube-node1 ~]# systemctl enable kubelet.service kube-proxy.service 
    [root@kube-node1 ~]# systemctl start kubelet.service kube-proxy.service
    
    • 1
    • 2
    • 主控节点验证
    [root@kube-master ~]# kubectl get node
    NAME         STATUS    ROLES     AGE       VERSION
    kube-node1   Ready     <none>    2d        v1.10.3
    kube-node2   Ready     <none>    2d        v1.10.3
    kube-node3   Ready     <none>    2d        v1.10.3
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5、安装kube-dashboard

    5.1、部署

    • 上传dashboard镜像到harbor仓库(略)
    • 编辑dashboard配置文件
    > [root@kube-master ~]# vim kube-dashboard.yaml 
    > 18     spec:
    > 19       containers:
    > 20       - name: kubernetes-dashboard
    > 21         image: harbor.soft72.com:8080/public/kubernetes-dashboard-amd64:v1.8.3 #dashboard私有仓库地址
    > 22         ports:
    > 23         - containerPort: 9090
    > 24           protocol: TCP
    > 25         args:
    > 26           - --apiserver-host=http://192.168.168.60:8080 #修改为Master的IP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 创建dashboard容器
    [root@kube-master ~]# kubectl create -f kube-dashboard.yaml
    deployment.apps "kubernetes-dashboard" created
    service "kubernetes-dashboard" created
    
    • 1
    • 2
    • 3
    • 验证
    > [root@kube-node2 ~]# docker ps #pod随机分配到了node2节点上
    
    • 1
    > 验证
    > http://192.168.168.62:30090
    
    • 1
    • 2
  • 相关阅读:
    WEB 渗透之SSTI 模板注入
    【小爱学大数据】FlinkKafkaConsumer
    基于单片机的自动循迹小车(论文+源码)
    笔记本电脑的摄像头找不到黑屏解决办法
    Java21虚拟线程实践
    软件测试零基础新手入门必看
    3. 一级缓存解析
    Java框架 SpringMVC--拦截器与异常处理器
    MySQL更新锁表超时 Lock wait timeout exceeded
    Robinhood基于Apache Hudi的下一代数据湖实践
  • 原文地址:https://blog.csdn.net/qq_43297415/article/details/132967871