zoukankan      html  css  js  c++  java
  • kubeadm安装Kubernetes 1.15 实践

    原地址参考github

    一、环境准备(在全部设备上进行)

    3 台 centos7.5 服务器,网络使用 Calico。

    IP地址 节点角色 CPU 内存 Hostname
    10.0.1.45 master 2c 4G k8s-master
    10.0.1.20 node 2c 4G node1
    10.0.1.18 node 2c 4G node2
    1. 设置主机名 hostname。
    hostnamectl set-hostname k8s-master
    

    对应上面表格的Hostname,node1与node2同理。

    1. 编辑3台设备的 host 文件,添加域名解析。
    cat <<EOF >>/etc/hosts
    10.0.1.45 k8s-master
    10.0.1.20 node1
    10.0.1.18 node2
    EOF
    
    1. 关闭防火墙、selinux 和 swap
    systemctl stop firewalld
    
    systemctl disable firewalld
    

    禁用SELINUX:

    setenforce 0
    
    vim /etc/selinux/config
    SELINUX=disabled
    

    关闭swap

    swapoff -a
    
    sed -i 's/.*swap.*/#&/' /etc/fstab
    
    1. 配置内核参数,将桥接的IPv4流量传递到iptables的链
    cat > /etc/sysctl.d/k8s.conf <<EOF
    
    net.bridge.bridge-nf-call-ip6tables = 1
    
    net.bridge.bridge-nf-call-iptables = 1
    
    net.ipv4.ip_forward = 1
    EOF
    
    sysctl --system
    
    1. kube-proxy 开启 ipvs。
      由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:
    ip_vs
    ip_vs_rr
    ip_vs_wrr
    ip_vs_sh
    nf_conntrack_ipv4
    

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

    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    
    1. 安装docker

    Kubernetes 1.15当前支持的 docker 版本列表是1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。 这里在各节点安装 docker 的18.09.7版本。

    yum install -y yum-utils   device-mapper-persistent-data   lvm2 &&
    yum-config-manager --add-repo    https://download.docker.com/linux/centos/docker-ce.repo &&
    yum install docker-ce-18.09.7-3.el7 -y
    
    1. 修改docker cgroup driver为systemd

    根据文档CRI installation中的内容,对于使用 systemd 作为init system 的 Linux 的发行版,使用 systemd 作为docker 的 cgroup driver 可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上 docker 的 cgroup driver 为 systemd。

    vim /etc/docker/daemon.json
    
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    #重启docker
    systemctl restart docker
    
    #验证
    docker info | grep Cgroup
    Cgroup Driver: systemd
    
    1. 安装 Kubernetes 工具

    配置国内 yum 源

    yum install -y wget
    
    mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
    
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
    
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
    
    yum clean all && yum makecache
    

    配置国内 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
    

    安装kubeadm、kubelet、kubectl

    yum install -y kubeadm kubelet kubectl
    
    systemctl enable kubelet
    

    二、k8s-master 节点配置

    1.使用 kubeadm 初始化 Kubernetes 集群

    kubeadm init --kubernetes-version=1.15.0 
    
    --apiserver-advertise-address=10.0.1.45 
    
    --image-repository registry.aliyuncs.com/google_containers 
    
    --pod-network-cidr=10.244.0.0/16
    

    参数含义:

    --apiserver-advertise-address=10.0.1.45
    #定义api server地址就是master本机IP地址。
    
    --image-repository registry.aliyuncs.com/google_containers
    #由于kubeadm默认从官网k8s.grc.io下载镜像,以防网络原因,改为阿里云镜像仓库地址。
    
    --pod-network-cidr=10.244.0.0/16
    #定义POD网段为: 10.244.0.0/16。
    

    集群初始化成功后返回如下信息:

    join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4 
    
    --discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb
    
    1. 配置 kubectl 工具
    mkdir -p ~/.kube
    
    cp /etc/kubernetes/admin.conf ~/.kube/config
    
    #查看集群状态,确认所有组件都处于healthy状态
    kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                  
    scheduler            Healthy   ok                  
    etcd-0               Healthy   {"health":"true"}
    

    集群初始化如果遇到问题,可以使用下面的命令进行清理(慎用):

    kubeadm reset
    
    1. 安装 Calico v3.8 网络服务
    wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
    
    #由于默认的 calico.yaml 的 Pod 网段为192.168.0.0/16,打开 calico.yaml 文件找到这行改为10.244.0.0/16。
    vim calico.yaml
    
    - name: CALICO_IPV4POOL_CIDR
      value: "10.244.0.0/16"
    
    kubectl apply -f ./calico.yaml
    
    #查看创建情况,等待每个 pod 的 STATUS 变为 Running。
    watch kubectl get pods --all-namespaces
    NAMESPACE    NAME                                       READY  STATUS   RESTARTS  AGE
    kube-system  calico-kube-controllers-6ff88bf6d4-tgtzb   1/1    Running  0         2m45s
    kube-system  calico-node-24h85                          1/1    Running  0         2m43s
    kube-system  coredns-846jhw23g9-9af73                   1/1    Running  0         4m5s
    kube-system  coredns-846jhw23g9-hmswk                   1/1    Running  0         4m5s
    kube-system  etcd-jbaker-1                              1/1    Running  0         6m22s
    kube-system  kube-apiserver-jbaker-1                    1/1    Running  0         6m12s
    kube-system  kube-controller-manager-jbaker-1           1/1    Running  0         6m16s
    kube-system  kube-proxy-8fzp2                           1/1    Running  0         5m16s
    kube-system  kube-scheduler-jbaker-1                    1/1    Running  0         5m41s
    

    4 设置环境变量

    cat   > ~/.bash_profile << EOF
    export KUBECONFIG=/etc/kubernetes/admin.conf
    EOF
    

    三、node 节点配置(在所有node节点上操作)

    添加 node 节点,执行如下命令,使所有 node 节点加入 Kubernetes 集群。

    kubeadm join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4    
     --discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb
    

    成功后,在 k8s-master 中输入命令检查集群状态。

    kubectl get nodes
    NAME         STATUS   ROLES    AGE     VERSION
    k8s-master   Ready    master   36m     v1.15.0
    node1        Ready    <none>   3m10h   v1.15.0
    node2        Ready    <none>   3m      v1.15.0
    

    四、部署 Dashboard(在k8s-master上进行操作)

    1. 下载 Dashboard 的 yaml 文件。
    wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
    
    #修改 yaml 文件中使用的源镜像。
    sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml
    #使用 NodePort 模式映射 30001 至 k8s 所有宿主机的 30001 端口上。
    sed -i '/targetPort:/a      nodePort: 30001
      type: NodePort' kubernetes-dashboard.yaml
    
    1. 部署 Dashboard。
    kubectl apply -f kubernetes-dashboard.yaml
    
    1. 创建完成后,检查相关服务运行状态。
    kubectl get deployment kubernetes-dashboard -n kube-system
    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    kubernetes-dashboard   1/1     1            1           3m
    
    kubectl get services -n kube-system
    NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
    kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   40m
    kubernetes-dashboard   NodePort    10.99.190.175   <none>        443:30001/TCP            4m
    
    1. 在 Firefox 浏览器输入 Dashboard 访问地址: https://10.0.1.45:30001
      注: 由于 Dashborad 的认证原因,谷歌浏览器和 IE 可能无法打开,请使用 Firefox 浏览器。

    2. 查看访问 Dashboard 的认证令牌。

    kubectl create serviceaccount  dashboard-admin -n kube-system
    kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    
    1. 使用输出的 token 登录 Dashboard。

    五 创建

    1 使用命令创建pod

    [root@k8s-master mainfests]# kubectl run nginx-deploy --image=nginx:1.14 --port=80 --replicas=3
    
    [root@k8s-master mainfests]# kubectl get pods
    NAME                           READY   STATUS    RESTARTS   AGE
    nginx-deploy-bc9ff65dd-6kvfg   1/1     Running   0          16h
    nginx-deploy-bc9ff65dd-ffcl5   1/1     Running   0          16h
    nginx-deploy-bc9ff65dd-pvjzt   1/1     Running   0          17h
    

    2 使用yaml创建pod

    [root@k8s-master mainfests]# cat pod-demo.yml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-demo
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: nginx:1.14
      - name: busybox
        image: busybox:latest
        command:
        - "bin/sh"
        - "-c"
        - "sleep 3600"
    
    [root@k8s-master mainfests]# kubectl  create -f pod-demo.yml
    
    创建一个serviceaccount,使其token只能进入default空间
    
    kubectl create   serviceaccount def-ns-admin  -n  default 
    kubectl  create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
    
    将token转换为config文件
     
    ADMIN_TOKON=$(kubectl get secret `kubectl get secret | awk '/^dashboard-admin-01/{print $1}'` -o jsonpath={.data.token} | base64 -d)
     kubectl  config set-credentials default --token=$ADMIN_TOKON --kubeconfig=/root/admin-test.conf
     kubectl  config set-context default@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/admin-test.conf
     kubectl  config use-context default@kubernetes --kubeconfig=/root/admin-test.conf
    
    
    赵客缦胡缨,吴钩霜雪明。 银鞍照白马,飒沓如流星。
  • 相关阅读:
    剑指offer_11:二进制中1的个数
    剑指offer_10:矩形覆盖
    spring mvc 访问静态资源
    spring context:component-scan ex
    spring aop配置未生效
    415 Unsupported Media Type
    spring mvc 接收List对象入参
    JIRA甘特图
    JIRA的工时
    JIRA导出工作日志到Excel
  • 原文地址:https://www.cnblogs.com/boy215/p/11276010.html
Copyright © 2011-2022 走看看