• 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
    
    
    赵客缦胡缨,吴钩霜雪明。 银鞍照白马,飒沓如流星。
  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/boy215/p/11276010.html
Copyright © 2020-2023  润新知