• Kubernetes云平台部署


        Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。

    K8S集群中有管理节点与工作节点两种类型部署架构如图7-5-1所示。管理节点主要负责K8S集群管理,集群中各节点间的信息交互、任务调度,还负责容器、PodNameSpacesPV等生命周期的管理。工作节点主要为容器和Pod提供计算资源,Pod及容器全部运行在工作节点上,工作节点通过Kubelet服务与管理节点通信以管理容器的生命周期,并与集群其他节点进行通信。

    1了解Kubernetes容器云平台的架构

    2了解Kubernetes容器云平台的基本原理。

    3)掌握使用Kubeadm部署Kubernetes集群

    所有节点安装CentOS_7.2.1511系统配置网卡和主机名

    1.基础环境配置

    配置YUM

    所有节点将提供的压缩包K8S.tar.gz上传至/root目录并解压。

    # tar -zxvf K8S.tar.gz

    所有节点配置本地YUM

     

    升级系统内核

    所有节点升级系统内核。

    # yum upgrade -y

    配置主机映射

    所有节点,修改/etc/hosts文件。

    # cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

    172.16.51.38 master

    172.16.51.39 node

    (1)配置防火墙及SELinux

    所有节点配置防火墙及SELinux

    # systemctl stop firewalld && systemctl disable firewalld

    # iptables -F

    # iptables -X

    # iptables -Z

    # /usr/sbin/iptables-save

    # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

    # reboot

    (2)关闭Swap

    Kubernetes的想法是将实例紧密包装到尽可能接近100%。所有的部署应该与CPU和内存限制固定在一起。所以如果调度程序发送一个Pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度。所以关闭Swap主要是为了性能考虑。

    所有节点关闭Swap

    # swapoff -a

    # sed -i "s//dev/mapper/centos-swap/#/dev/mapper/centos-swap/g" /etc/fstab

    (3)配置时间同步

    所有节点安装chrony服务。

    # yum install -y chrony

    Master节点修改/etc/chrony.conf文件,注释默认NTP服务器,指定上游公共NTP服务器,并允许其他节点同步时间

     

    Master节点重启chronyd服务并设为开机启动,开启网络时间同步功能。

    [root@master ~]# systemctl enable chronyd && systemctl restart chronyd

    [root@master ~]# timedatectl set-ntp true

    Node节点修改/etc/chrony.conf文件,指定内网Master节点为上游NTP服务器,重启服务并设为开机启动

     

    所有节点执行chronyc sources命令,查询结果中如果存在以“^*”开头的行,即说明已经同步成功

     

    (4)配置路由转发

    RHEL/CentOS7上的一些用户报告了由于iptables被绕过而导致流量路由不正确的问题,所以需要在各节点开启路由转发。

    所有节点创建/etc/sysctl.d/K8S.conf文件,添加如下内容

     

    (5)配置IPVS

    由于IPVS已经加入到了内核主干,所以需要加载以下内核模块以便为kube-proxy开启IPVS功能。

    在所有节点执行以下操作

     

    上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块

     

    所有节点安装ipset软件包。

    # yum install ipset ipvsadm -y

    (6)安装Docker

    Kubernetes默认的容器运行时仍然是Docker,使用的是Kubelet中内置dockershim CRI实现。需要注意的是,在Kubernetes1.14的版本中,支持的版本有1.13.117.0317.0617.0918.0618.09,案例统一使用Docker 18.09版本。

    所有节点安装Docker,启动Docker引擎并设置开机自启

    # yum install -y yum-utils device-mapper-persistent-data lvm2

    # yum install docker-ce-18.09.6 docker-ce-cli-18.09.6 containerd.io -y

    # mkdir -p /etc/docker

    # tee /etc/docker/daemon.json <<-'EOF'

    {

      "exec-opts": ["native.cgroupdriver=systemd"]

    }

    EOF

    # systemctl daemon-reload

    # systemctl restart docker

    # systemctl enable docker

    # docker info |grep Cgroup

     Cgroup Driver: system

     

    2.安装Kubernetes集群

    1)安装工具

    Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。KubeadmKubernetes的自动化部署工具,降低了部署难度,提高效率。KubectlKubernetes集群命令行管理工具。

    所有节点安装Kubernetes工具并启动Kubelet

    # yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1

    # systemctl enable kubelet && systemctl start kubelet

    // 此时启动不成功正常,后面初始化的时候会变成功

    2)初始化Kubernetes集群

    登录Master节点,初始化Kubernetes集群

    [root@master ~]# ./kubernetes_base.sh

    [root@master ~]# kubeadm init --apiserver-advertise-address172.16.51.38

    --kubernetes-version="v1.14.1" --pod-network-cidr=10.16.0.0/16 --image-repository=registry.aliyuncs.com/google_containers

     

     

    初始化操作主要经历了下面15个步骤,每个阶段均输出均使用[步骤名称]作为开头:

    ①[init]:指定版本进行初始化操作。

    ②[preflight]:初始化前的检查和下载所需要的Docker镜像文件。

    ③[kubelet-start]:生成Kubelet的配置文件/var/lib/kubelet/config.yaml,没有这个文件Kubelet无法启动,所以初始化之前的Kubelet实际上启动失败。

    ④[certificates]:生成Kubernetes使用的证书,存放在/etc/kubernetes/pki目录中。

    ⑤[kubeconfig]:生成KubeConfig文件,存放在/etc/kubernetes目录中,组件之间通信需要使用对应文件。

    ⑥[control-plane]:使用/etc/kubernetes/manifest目录下的YAML文件,安装Master组件。

    ⑦[etcd]:使用/etc/kubernetes/manifest/etcd.yaml安装Etcd服务。

    ⑧[wait-control-plane]:等待control-plan部署的Master组件启动。

    ⑨[apiclient]:检查Master组件服务状态。

    ⑩[uploadconfig]:更新配置。

    11[kubelet]:使用configMap配置Kubelet

    12[patchnode]:更新CNI信息到Node上,通过注释的方式记录。

    13[mark-control-plane]:为当前节点打标签,打了角色Master和不可调度标签,这样默认就不会使用Master节点来运行Pod

    14[bootstrap-token]:生成的Token需要记录下来,后面使用kubeadm join命令往集群中添加节点时会用到。

    15[addons]:安装附加组件CoreDNSkube-proxy

    输出结果中的最后一行用于其它节点加入集群。

    Kubectl默认会在执行的用户home目录下面的.kube目录中寻找config文件,配置kubectl工具

    检查集群状态。

     

    3)配置Kubernetes网络

    登录Master节点,部署flannel网络

    [root@master ~]# kubectl apply -f yaml/kube-flannel.yml

    [root@master ~]# kubectl get pods -n kube-system

     

    4Node节点加入集群

    登录Node节点,使用kubeadm join命令将Node节点加入集群

    [root@master ~]# ./kubernetes_base.sh

    [root@node ~]# kubeadm join 172.16.51.38:6443 --token qf4lef.d83xqvv00l1zces9 --discovery-token-ca-cert-hash

    sha256: da4abe3eba3627f4b7e33593b3f757e2e5d73e7ec9b110ca4099bc9f4970b57f

     

    登录Master节点,检查各节点状态。

     

    5)安装Dashboard

    使用kubectl create命令安装Dashboard

     

    创建管理员。

     

    检查所有Pod状态。

     

    查看Dashboard端口号。

     

    可以查看到kubernetes-dashboard对外暴露的端口号为30000,在Firefox浏览器中输入地址(https://172.16.51.38:30000),即可访问Kubernetes Dashboard

     

    单击“接受风险并继续”按钮,即可进入Kubernetes Dasboard认证界面

     

    登录Kubernetes Dasboard需要输入令牌,通过以下命令获取访问Dashboard的认证令牌

    [root@master ~]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kubernetes-dashboard-admin-token | awk '{print $1}')

    Name:         kubernetes-dashboard-admin-token-42zl6

    Namespace:    kube-system

    Labels:       <none>

    Annotations:  kubernetes.io/service-account.name: kubernetes-dashboard-admin

                  kubernetes.io/service-account.uid: 601e0f06-a2c3-11ea-847b-000c29bfeaf6

    Type:  kubernetes.io/service-account-token

    Data

    ====

    ca.crt:     1025 bytes

    namespace:  11 bytes

    token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbi10b2tlbi00MnpsNiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjYwMWUwZjA2LWEyYzMtMTFlYS04NDdiLTAwMGMyOWJmZWFmNiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZC1hZG1pbiJ9.bia0KuZu3wR4FfK7gl6wqWcPfylcCc1HnIuKHmLq78Vv0qcLh-HZr_rNIi2kkqLKi4CcRer2zvFvBqmmtTKBGN7PRSDa1zs6ilYuwPYUYqvzv93GQAF3SJgfM4j65x54iEcuTw8eMz4byEt1af7orHMUgKEI9T7kTEMqOD7azwPVCsYihm11rH8oikHNuhx72cxJIGWtg2ApDxgRBfEA8RHhtS8FyAotkYw5d2haXTcj1juh1X6cvLHihEmeM71IXaKdouhZnZbWymK90IPAWwQFP-fesvIOhhr8C1UwpVKaOHaeSgnqQYNjfjzVqiBDmBJdu29PUinqqXSmmaHLEg

     

    将获取到的令牌输入浏览器,认证后即可进入Kubernetes控制台

     

    6)配置Kuboard

    Kuboard是一款免费的Kubernetes图形化管理工具,其力图帮助用户快速在Kubernetes上落地微服务。登录Master节点,使用kuboard.yaml文件部署Kuboard

     

    在浏览器中输入地址http://172.16.51.38:31000,即可进入Kuboard的认证界面,如图7-5-5所示,在Token文本框中输入令牌后可进入Kuboard控制台

     

     

    3.配置Kubernetes集群

    1)开启IPVS

    [root@master ~]# kubectl edit cm kube-proxy -n kube-system

        ipvs:

          excludeCIDRs: null

          minSyncPeriod: 0s

          scheduler: ""

          syncPeriod: 30s

        kind: KubeProxyConfiguration

        metricsBindAddress: 127.0.0.1:10249

        mode: "ipvs"    //修改此处

        nodePortAddresses: null

        oomScoreAdj: -999

        portRange: ""

        resourceContainer: /kube-proxy

        udpIdleTimeout: 250ms

     

    2)重启kube-proxy

    [root@master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

    由于已经通过ConfigMap修改了kube-proxy的配置,所以后期增加的Node节点,会直接使用IPVS模式。查看日志

    日志中打印出了“Using ipvs Proxier”字段,说明IPVS模式已经开启。

    测试IPVS

    使用ipvsadm测试,可以查看之前创建的Service是否已经使用LVS创建了集群

    [root@master ~]# ipvsadm -Ln

    (3)调度Master节点

    出于安全考虑,默认配置下Kubernetes不会将Pod调度到Master节点。查看Master节点Taints字段默认配置:

     

    如果希望将K8S-master也当作Node节点使用,可以执行如下命令

     

     

    Taints:             <none>    //状态已经改变

    可以看到Master节点的调度状态已经发生改变

  • 相关阅读:
    团队博客-会议之初
    5.2 个人作业2
    5.1 如何利用Intellij Idea搭建python编译运行环境
    4.27 python神器——Anaconda的安装与优化配置
    4.26 AlertDialog(对话框)详解
    4.25 xmapp启动mysql出现Error: MySQL shutdown unexpectedly.
    4.24 Android Studio下应用签名的方法以及获取 MD5、SHA1(签名)、SHA256 值
    4.23 2020.2新版本idea创建javaEE web文件
    4.22 Android studio 通过获取验证码用户登陆成功
    4.21 Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
  • 原文地址:https://www.cnblogs.com/lzp123/p/13769818.html
Copyright © 2020-2023  润新知