zoukankan      html  css  js  c++  java
  • kubernetes1.13.5安装部署

    Kubernetes

    一、    Kubernetes介绍

    各节点所需组件

    Master:docker,kubeadm,kubelet,

    组件

    版本

    备注

    Kubelet

    1.13.5

    组件

    Kubeadm

    1.13.5

    组件

    Kubectl

    1.13.5

    组件

    Docker

    18.0.9.3

    CgroupDriver: systemd

    kube-proxy

    V1.13.5

    镜像

    kube-controller-manager

    V1.13.5

    镜像

    kube-apiserver

    V1.13.5

    镜像

    kube-scheduler

    V1.13.5

    镜像

    quay.io/coreos/flannel

    v0.11.0-amd64

    镜像

    Coredns

    1.2.6

    镜像

    Etcd

    3.2.24

    镜像

    pause 

    3.1

    镜像

    节点信息

    地址

    角色

    备注

    172.18.14.90

    Master

    172.18.14.91

    Node

    172.18.14.92

    node

    二、    环境配置

    Docker安装省略,kubermetes1.13.5版本最高支持docker18.06这里安装的是18.09

    一、     以root用户登陆,配置kubernetes镜像源

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo

    [kubernetes]

    name=Kubernetes

    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

    enabled=1

    gpgcheck=1

    repo_gpgcheck=1

    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

    EOF

    二、     禁用selinux,关闭防火墙

    修改配置文件/etc/selinux/ config

    SELINUX=disabled

    #setenforce 0

    或者

    setenforce 0

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

    systemctl stop firewalld

    systemctl disable firewalld

     

    三、     设置网桥包经IPTables,core文件生成路径

    echo """

    vm.swappiness = 0

    net.bridge.bridge-nf-call-iptables = 1

    net.ipv4.ip_forward = 1

    net.bridge.bridge-nf-call-ip6tables = 1

    """ > /etc/sysctl.conf

    sysctl -p

    四、     同步时间

    yum install -y ntpdate

    ntpdate -u ntp5.aliyun.com   

    #ntp1-7. aliyun.com都可以,如无法联网则可以自建ntp服务器

    五、      更新内核

    升级内核(可选),1.14版本支持5.0,1.13.5可忽略警告

    $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

    $ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

    上述命令为启用elrepo仓库,我们可以使用以下命令列出可用的系统内核相关包:

    $ yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

     

    之后,就可以安装最新的稳定内核:

    $ yum --enablerepo=elrepo-kernel install kernel-ml

     

    重启机器,并选择最新安装的内核(第一个)

     

    进入系统之后,查看内核版本uname -r

     

    设置GRUB默认的内核版本

    启动系统时,系统默认选择之前的版本,所以我们需要设置一下GRUB

    重新创建内核配置

    $ grub2-mkconfig -o /boot/grub2/grubenv

    重启

    六、     重启# 确认内核版本后,开启IPVS  #功能开启暂时未使用

    #uname -a

    #cat > /etc/sysconfig/modules/ipvs.modules <<EOF

    #!/bin/bash

    ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"

    for kernel_module in ${ipvs_modules}; do

     /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1

     if [ $? -eq 0 ]; then

     /sbin/modprobe ${kernel_module}

     fi

    done

    EOF

    #chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs

    三、    安装kubernetes组件

    通过kubeadm安装部署,镜像仓库采用阿里云。安装速度取决于网速

    一、     安装组件

    #最新版1.14安装测试问题较多,所以用了1.13.5

    yum install -y kubelet-1.13.5 kubeadm-1.13.5 kubectl-1.13.5

    二、     初始化master

    #kubeadm init --kubernetes-version=1.13.5 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=swap --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers  --ignore-preflight-errors=SystemVerification

     

    # --pod-network-cidr使用flannel网络解决方案,默认10.244.0.0/16,如不指使用flannel时则会失败

    #--image-repository  使用阿里云镜像源,免去 科xue上网

    #--ignore-preflight==SystemVerification   忽略内核版本

    #--ignore-preflight-errors=swap    忽略swap设备警告,建议禁止swap设备

    出现如下即成功

    添加flannel插件:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    三、     执行脚本

      mkdir -p $HOME/.kube

      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

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

    四、     记录令牌

    l  添加Work节点

    kubeadm join 172.18.14.90:6443 --token 17s13m.l22ssehvmm8ka1fy --discovery-token-ca-cert-hash sha256:90775d540aeb69e0e74405a3c3dd754afec0e58c020c312c07afc01b2813a4e7 --ignore-preflight-errors=swap --ignore-preflight-errors=SystemVerification

    l  查看状态

    # kubectl get node

    # kubectl get pod --all-name-spaces

    四、    安装dashboard

    详情可见:https://github.com/kubernetes/dashboard

    个人参考:https://www.jianshu.com/p/c6d560d12d50            

    一、     下载镜像

    #docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64

    更名

    #docker  tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64  k8s.gcr.io/kubernetes-dashboard-amd64

    二、     部署

    #master节点执行如下

    # kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

    #开启代理

    # kubectl  proxy

    如下所示已正常运行。

    测试发现dashboard的证书过期,用浏览器无法访问。

    三、     制作证书

    命令参考:alias ksys='kubectl -n kube-system'

     

    1)    生成证书通过openssl生成自签名证书

    #cd  /root/keys

    # openssl genrsa -out dashboard.key 2048

    # openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=172.18.14.90‘

    # openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt

    # openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.cr

    #openssl x509 -in dashboard.crt -text -nooutt

    这样就有了证书文件dashboard.crt 和 私钥 dashboad.key

    2)    下载yaml,并修改

    #wget   https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

        #删除Dashboard Secret字段中的内容

        #修改service 为nodeport类型,固定访问端口

        修改前  

    kind: Service

    apiVersion: v1

    metadata:

      labels:

        k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

      namespace: kube-system

    spec:

       ports:

        - port: 443

          targetPort: 8443

      selector:

        k8s-app: kubernetes-dashboard

                    修改后

    kind: Service

    apiVersion: v1

    metadata:

      labels:

        k8s-app: kubernetes-dashboard

      name: kubernetes-dashboard

      namespace: kube-system

    spec:

      type: NodePort

      ports:

        - port: 443

          nodePort:30003   #固定30003端口

          targetPort: 8443

      selector:

        k8s-app: kubernetes-dashboard

     

    3)    生成secret

    #ksys create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt

    #ksys get secret | grep dashboard

    #ksys describe secret kubernetes-dashboard-certs

    如下图所示

    4)    重新apply yaml文件

    #kubectl apply -f kubernetes-dashboard.yaml

    查看服务状态

    5)               通过浏览器访问:

    https://masterip:30003

    四、     设置DashBoard-身份验证

    登录dashboard 的时候支持Kubeconfig 和token 两种认证方式,Kubeconfig 中也依赖token 字段,所以生成token 这一步是必不可少的。

    生成token

    我们创建一个admin用户并授予admin 角色绑定,使用下面的yaml文件创建admin用户并赋予他管理员权限,然后就可以通过token 登陆dashbaord,这种认证方式本质实际上是通过Service Account 的身份认证加上Bearer token请求 API server 的方式实现,参考 Kubernetes 中的认证

    1)   

    kind: ClusterRoleBinding

    apiVersion: rbac.authorization.k8s.io/v1beta1

    metadata:

      name: admin

      annotations:

        rbac.authorization.kubernetes.io/autoupdate: "true"

    roleRef:

      kind: ClusterRole

      name: cluster-admin

      apiGroup: rbac.authorization.k8s.io

    subjects:

    - kind: ServiceAccount

      name: admin

      namespace: kube-system

    ---

    apiVersion: v1

    kind: ServiceAccount

    metadata:

      name: admin

      namespace: kube-system

      labels:

        kubernetes.io/cluster-service: "true"

        addonmanager.kubernetes.io/mode: Reconcile

    .在node节点上创建:vim admin-sa.yaml

    2)    执行如下

    #kubectl create -f admin-sa.yaml

    #查看是否成功

    3)      获取token

    #kubectl get secret gitlab-admin -o jsonpath="{['data']['token']}" | base64 --decode

    屏幕输出相应token,输入就可以登陆

     

    五、    记录坑

    l  下载镜像

    可通过

    docker   pull   registry.cn-hangzhou.aliyuncs.com/google_containers/镜像名字:版本号

    注意冒号,然后tag自己所需的镜像名

    l  master开放6443端口(建议禁用firewalld和iptables)

    l  查看kubelet报错详细信息

                   journalctl -xeu kubelet

    l  kubelet增加启动参数

    建议禁用swap设备

     

    l  设置docker 驱动

    #more /etc/docker/daemon.json

    {

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

    }

    #systemctl daemon-reload

    # systemctl restart docker

    #docekr  info   查看是否更改

  • 相关阅读:
    AJAX教程
    HTTP请求响应对照表
    JQuery教程
    服务器网络编程一
    servlet
    DOM浏览器文档模型
    在centos7下安装nodejs14
    将C#控制台程序部署到Linux系统
    在gitlab上通过python服务钩子实现自动部署
    Centos 7搭建Gitlab服务器超详细
  • 原文地址:https://www.cnblogs.com/doufy/p/10730812.html
Copyright © 2011-2022 走看看