1 环境准备


节点主机名IPOS
Master    k8s-master       192.168.57.1      centos 7       
Node1 k8s-node-1192.168.57.2centos 7
2 离线包下载

   我已经整理好需要的可以@我

 

3 设置主机名

     Master上执行: hostnamectl --static set-hostname k8s-master
     Node1上执行: hostnamectl --static set-hostname k8s-node-1

     重启
     reboot

4 分别修改节点的hosts文件,并使内容保持一致

    # 编辑hosts文件

    vi /etc/hosts

   # 新增下面的内容,wq保存。

 
 
192.168.57.1 k8s-master  
192.168.57.2 k8s-node-1

5 关闭防火墙

systemctl stop firewalld       
systemctl disable firewalld
master节点与node节点做互信
    ssh-keygen
    ssh-copy-id k8s-node-1

下面7-13步需要在Master和Node上都执行

 

7 关闭selinux

    # 编辑config文件

    vi /etc/selinux/config

    将SELINUX=enforcing改为SELINUX=disabled,wq保存。

 

    # 当前临时关闭selinux(不重启临时关闭selinux的方式)

    se tenforce 0
 

8  关闭swap

    # 当前临时关闭虚拟内存

    swapoff -a
    若不关闭下面初始化master的时候会存在下图的错误:
    
 

    # 修改/etc/fstab文件

     vi /etc/fstab

 

   # 加#注释掉下面的语句屏蔽SWAP的自动挂载,wq保存

      # /dev/mapper/centos-swap swapswapdefaults0 0
 

9 配置路由参数,防止kubeadm报路由警告

     # 将内容写入k8s.conf文件

cat <<EOF >  /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF

     # 立即生效

       sysctl --system
10 安装docker
    rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
   发现缺少依赖包的错误
 
   在mypackages目录下执行 
    yum -y install *.rpm
   然后再执行   
   rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
    
   rpm -ihv docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
若出现下图情况需要先执行以下 rpm -ihv libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
    systemctl   start   docker && systemctl   enable   docker
   docker version
   
11 导入镜像
  在 k8s_images /docker_images目录下执行
    
      for  i  in  $(ls *.tar); do  docker load <  $i ; done
    
12  安装kubelet  kubectl  kubeadm 包
     在 k8s_images目录下执行     
     rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
     rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm
     rpm -ivh kubeadm-1.9.0-0.x86_64.rpm
           
13  启动 kubelet  
    systemctl start kubelet && sudo systemctl enable kubelet
14   初始化 Master Master执行
       kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16
     我执行的时候出现没有默认路由的错误,最后发现是我设置静态IP的时候忘了分配网关导致的,设置好网关重新执行
       发现存在错误
      
      cat  /var/log/message
      
 
       是kubelet默认的cgroup的driver和docker的不一样导致的,docker默认的cgroupfs,kubelet默认为systemd,编辑 10 -                             kubeadm.conf修改为 cgroupfs   (node也需要修改)
       vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
   
 
      重启
      system ctl daemon-reload &&  system ctl restart kubelet
       环境reset
      kubeadm reset
      重新初始化
       kubeadm init --kubernetes-version=v1 .9 .0   --pod-network-cidr= 10.244 .0 .0 / 16
 
       kubeadm join 这句话要记录下来 node节点加入 master 的时候要用到
     
     忘了可以通过  kubeadm token list查看
       默认token 24小时就会过期,后续的机器要加入集群需要重新生成token
      kubeadm   token   create
     查看 kubelet状态
       system ctl status kubelet
      
 
15  此时root用户还不能使用kubelet控制集群需要,配置下环境变量 Master执行

    对于非root用户

mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config
    对于root用户
    export   KUBECONFIG= /etc/ kubernetes/admin.conf
    也可以直接放到~/.bash_profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    source一下环境变量
source ~/.bash_profile
    kubectl version查看版本
  
 
  
16   安装网络,可以使用flannel、calico、weave、macvlan这里我用的flannel Master执行
   
   kube-flannel.yml里面的网段要和  kubeadm --pod-network-cidr设置的一致 默认是 10.244.0.0/16
    在 k8s_images目录下执行  
    kubectl create   -f   kube-flannel.yml
 
 
17 节点加入 Master (Node 执行
     执行上面保存的 kubeadm join  这句话
      kubeadm join --token f22fa7.6a1d26bae177b5f4 192.168.57.1:6443 --discovery-token-ca-cert-hash             sha256:2043570da1eaebcf9229910b68b0840cc1080712f20e682504be317aae824d9c
 
18 验证node 和pod 如下图代表Kubernetes 1.9.0 离线安装成功 Master执行
   kubectl get nodes
  
 
   kubectl get pods --all-namespaces
   
 
   docker ps
   
 
19  部署kubernetes-dashboard Master执行
      编辑kubernetes-dashboard.yaml  设置type为  NodePort ,设置在 范围30000-32767内的任意端口,我设置的是32000,(端口范围可以通过 kube-apiserver.yaml修改)
   
 
      kubectl create -f kubernetes-dashboard.yaml
   
   
      设置验证方式 默认验证方式有kubeconfig和token,这里都不用,我们使用basicauth的方式进行apiserver的验证。

     创建/etc/kubernetes/pki/basic_auth_file, 用于存放用户名、密码、用户ID。

      echo 'admin,admin,2' > /etc/kubernetes/pki/basic_auth_file

     编辑kube-apiserver.yaml,给kube-apiserver添加basic_auth验证

     vi /etc/kubernetes/manifests/kube-apiserver.yaml

 

     添加- --basic_auth_file=/etc/kubernetes/pki/basic_auth_file,wq保存。保存后若API pod停止了

     然后重启kubelet服务:

  systemctl restart kubelet        ,kubelet 会重启 kube-apiserver Pod

     ps:-与--之间的不是空格

     更新apiserver

      kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
 

    授权,k8s 1.6以后的版本都采用RBAC授权模型,给admin授权默认cluster-admin是拥有全部权限的,将admin和cluster-admin bind这样admin就有cluster-admin的权限。

    kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

验证apiserver

curl --insecure https: //192.168.57.1:6443 -basic -u admin:admin
     
 


   

   通过火狐浏览器访问https://192.168.57.2:32000,192.168.57.2是节点IP

   

 

 基本下面输入用户名密码登录后页面   

 
注:由于我在当前主机上装的时候忘了一些截图,所以上面部分截图是我在别的上装的时候的截图


Logo

开源、云原生的融合云平台

更多推荐