• Centos7部署k8s集群及应用


    简介

    K8S集群通常由两部分构成:master结点和node结点
    master结点的主要工作是负责集群的控制,对pod进行调度,对令牌的管理等
    node结点的主要工作是负责干活,启动容器和管理容器
    master结点和node结点一般采用分布式部署

    前期准备

    准备三台Centos7虚拟机,修改IP地址和hostname,关闭防火墙和selinux,同步三个结点的时间,修改IP地址与hostname映射关系

    hostnameip
    192.168.29.143node1
    192.168.29.142node2
    192.168.29.144node3

    关闭swap

    # swapoff -a

    结点之间进行SSH免密登陆

    # ssh-keygen #创建密钥
    # ssh-copy-id root@node1
    # ssh-copy-id root@node2
    # ssh-copy-id root@node3
    #验证
    # ssh root@node1
    # ssh root@node2
    # ssh root@node3

    所有结点安装kubernetes以及docker

    配置kubernetes的yum源

    [kubernetes]
    name=Kubernetes repo
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=0

    获取docker的yum源
    下载地址:https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    yum makecache
    yum install kubelet kubeadm kubectl docker -y

    安装完成后启动服务

    systemctl start kubelet
    systemctl start docker

    部署集群

    node1结点进行集群初始化

    [root@node1 ~]# kubeadm init --apiserver-advertise-address=192.168.29.143 --image-repository  registry.aliyuncs.com/google_containers --kubernetes-version v1.18.1  --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

    执行初始化完成后根据提示进行以下操作,同时需要记录下提示画面中的token等信息,在后续结点加入集群中需要使用

    [root@node1 ~]# mkdir -p $HOME/.kube
    [root@node1 ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@node1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config

    把node2和node3结点加入到集群中
    若忘记记录token信息或token超过时限(24小时),可在node1结点执行以下命令重新生成token

    [root@node1 ~]# kubeadm token create #创建token
    [root@node1 ~]# kubeadm token list #查看token
    [root@node1 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' #生成验证信息

    根据初始化完毕后的提示页面中或重新创建的token信息,在node2和node3结点执行以下命令把结点加入集群中

    [root@node2 ~]#kubeadm join 192.168.29.143:6443 --token jt0aws.p9ni06om5c6vqc41 \
        --discovery-token-ca-cert-hash sha256:dde3b1db5dec438df389776202476af779d69eb0b38c8a2a77c9afa8301a94b3
    [root@node3 ~]#kubeadm join 192.168.29.143:6443 --token jt0aws.p9ni06om5c6vqc41 \
        --discovery-token-ca-cert-hash sha256:dde3b1db5dec438df389776202476af779d69eb0b38c8a2a77c9afa8301a94b3

    查看集群情况

    [root@node1 ~]# kubectl get nodes

    此时已完成集群的部署,但是各个node结点间并不能进行网络通信,因此状态都是NotReady

    部署集群网络

    在集群中安装部署flannel网络进行通信,拉取flannel镜像

    [root@node1 ~]#docker pull quay.io/coreos/flannel
    [root@node2 ~]#docker pull quay.io/coreos/flannel
    [root@node3 ~]#docker pull quay.io/coreos/flannel

    此时再次查看集群状态就可看到各个结点状态都是Ready了
    此时k8s集群部署完成

    部署Nginx应用

    拉取镜像
    在node2和node3结点上提前拉取Nginx镜像

    [root@node2 ~]# docker pull nginx
    [root@node3 ~]# docker pull nginx

    编写配置文件

    [root@node1 ~]# vi nginx-rc.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: nginx-controller
    spec:
      replicas: 2
      selector:
        name: nginx
      template:
        metadata:
          labels:
            name: nginx
        spec:
          containers:
            - name: nginx
              image: nginx
              ports:
                - containerPort: 80
    [root@node1 ~]# vi nginx-service.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service-nodeport
    spec:
      ports:
        - port: 8000
          targetPort: 80
          protocol: TCP
      type: NodePort
      selector:
        name: nginx

    部署Nginx

    [root@node1 ~]# kubectl create -f nginx-rc.yaml
    [root@node1 ~]# kubectl create -f nginx-service.yaml
    # 查看部署情况
    [root@node1 ~]# kubectl get pods
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-controller-d88nw   1/1     Running   0          44s
    nginx-controller-phkgw   1/1     Running   0          44s
    #详细情况
    [root@node1 ~]# kubectl get pods -o wide
    NAME                     READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
    nginx-controller-d88nw   1/1     Running   0          66s   10.244.2.11   node3   <none>           <none>
    nginx-controller-phkgw   1/1     Running   0          66s   10.244.1.10   node2   <none>           <none>
    #查看服务情况
    [root@node1 ~]# kubectl get service
    NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes               ClusterIP   10.96.0.1        <none>        443/TCP          46d
    nginx-service-nodeport   NodePort    10.103.127.253   <none>        8000:32765/TCP   84s

    测试验证

    #任意结点执行能返回index内容
    curl 192.168.29.143:32765
    curl 192.168.29.142:32765
    curl 192.168.29.144:32765
    #在宿主机访问成功则部署Nginx成功,同时可证明k8s集群部署成功
    http://192.168.29.143:32765
    http://192.168.29.143:32765
    http://192.168.29.144:32765

    公众号里回复:20200713k8s

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    [翻译] REMenu
    图片切换的效果
    刮奖效果
    粒子雪花效果
    Shimmer辉光动画效果
    解决Bootstrap 标签页(Tab)插件切换echarts不显示问题
    主要是解决,作为一个数据共享的数据库,存在的数据库统计,然后将计算的数据量输出到自己使用的数据库,进行主页面展示。
    使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。
    使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。
    mysql根据分组和条件查询以后如何统计记录的条数
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452772.html
Copyright © 2020-2023  润新知