节点信息:

主机名 IP 角色
k8s-master 10.10.0.10 master节点
k8s-node01 10.10.0.11 集群worke节点
k8s-node02 10.10.0.12 集群worke节点

一、初始化系统环境

系统初始化环境配置,需要在三台服务器都执行,以下命令请看对应的命令参数,在不同服务器执行。

1)主机名

分别在三台机器执行对应命令,设置主机名

  1. [root@centos01 ~]# hostnamectl set-hostname k8s-master
  2. [root@centos02 ~]# hostnamectl set-hostname k8s-node01
  3. [root@centos03 ~]# hostnamectl set-hostname k8s-node02

2)关闭防火墙、selinux

  1. [root@centos01 ~]# systemctl disable firewalld
  2. [root@centos01 ~]# systemctl stop firewalld
  3. [root@centos01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

3)设置内核

  1. [root@centos01 ~]# vim /etc/sysctl.d/k8s.conf
    ## 添加如下内容
    net.bridge.bridge-nf-call-ip6tables =
  2. net.bridge.bridge-nf-call-iptables =
  3. net.ipv4.ip_forward =
  4. ## 执行命令生效
  5. [root@centos01 ~]# modprobe br_netfilter
  6. [root@centos01 ~]# sysctl -p /etc/sysctl.d/k8s.conf

4)免密钥

在master节点进行对2台node节点进行免密钥登陆

  1. [root@k8s-master ~]# ssh-keygen
  2. [root@k8s-master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.0.11
    [root@k8s-master ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.0.12

二、部署kubernetes集群

1)配置yum源

yum源三台机器都需要配置,这里我们以master主机为例,node节点也按照此yum配置即可

  1. [root@k8s-master ~]# yum -y install wget
  2. [root@k8s-master ~]# cd /etc/yum.repos.d
  3. ## 配置docker-ce源
  4. [root@k8s-master yum.repos.d]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. ## 配置kubernetes源
  6. [root@k8s-master yum.repos.d]# vim /etc/yum.repos.d/kubernetes.repo
  7. [kubernetes]
  8. name=Kubernetes Repo
  9. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  10. gpgcheck=
  11. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  12. enabled=
  13. ## 下载校验文件
  14. [root@k8s-master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  15. [root@k8s-master ~]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  16. ## 导入校验文件
  17. [root@k8s-master ~]# rpm --import rpm-package-key.gpg
  18. [root@k8s-master ~]# rpm --import yum-key.gpg
    [root@k8s-master ~]# yum clean all  && yum makecache fast

2)安装docker、kubelet、kubeadm等工具

  1. [root@k8s-master ~]# yum install kubelet-1.14. kubeadm-1.14. kubectl-1.14.1 docker-ce -y
    ## node节点无需配置kubctl组件
    [root@k8s-node01 ~]# yum  install kubelet-1.14.1 kubeadm-1.14.1 docker-ce -y
    [root@k8s-node02 ~]# yum  install kubelet-1.14.1 kubeadm-1.14.1 docker-ce -y

3)配置docker kubelet

2台node节点也需要修改对应配置

  1. ## 设置kubelet启动时忽略swap报错
  2. [root@k8s-master ~]# vim /etc/sysconfig/kubelet
  3. KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    ## 设置开机自启动
    [root@k8s-master ~]# systemctl daemon-reload
    [root@k8s-master ~]# systemctl enable docker && systemctl restart docker
    [root@k8s-master ~]# systemctl enable kubelet && systemctl restart kubelet

4)初始化master节点

kubernetes从1.13版本开始,可以指定镜像仓库进行集群初始化操作,所以我们直接指定阿里云镜像仓库进行集群初始化,这样无需再关心国内网络环境是否可以下载到对应的官方原始pod镜像

  1. [root@k8s-master ~]# swapoff -a
    [root@k8s-master ~]# kubeadm init --apiserver-advertise-address=10.10.0.10 \
  2. --image-repository registry.aliyuncs.com/google_containers \
  3. --kubernetes-version v1.14.1 \
  4. --pod-network-cidr=10.244.0.0/

参数解释:

  • apiserver-advertise-address:apiserver地址及master节点地址
  • image-repository:镜像仓库地址
  • pod-network-cidr:pod网络

以上初始化,需要等待一段时间,因为需要下载对应组件镜像,master节点初始化完成后,可看到以下提示信息:

  1. ........
  2. [bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
  3. [bootstrap-token] creating the "cluster-info" ConfigMap in the "kube-public" namespace
  4. [addons] Applied essential addon: CoreDNS
  5. [addons] Applied essential addon: kube-proxy
  6.  
  7. Your Kubernetes control-plane has initialized successfully!
  8.  
  9. To start using your cluster, you need to run the following as a regular user:
  10.  
  11. mkdir -p $HOME/.kube
  12. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  13. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  14.  
  15. You should now deploy a pod network to the cluster.
  16. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  17. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  18.  
  19. Then you can join any number of worker nodes by running the following on each as root:
  20.  
  21. kubeadm join 10.10.0.10: --token 5ti5kd.o32bm9lofv6zej94 \
  22. --discovery-token-ca-cert-hash sha256:cd778ad01bdbc656eaff7d3b1273691f0070ebbadd2f1b8a3189a6dc1e88f39f

注意:

token是node节点加入时需要用到的信息,需要记录下来,tocken值24小时后失效,若果超过24小时你再进行node节点加入集群,需要重新生成tocken。

5)配置集群环境变量

用户想要使用kubectl操作集群,则需要配置kubectl环境变量,这些命令也是上面kubeadm init后输出的内容

  1. [root@k8s-master ~]# mkdir -p $HOME/.kube
  2. [root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. [root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
    ## 查看集群信息
    [root@k8s-master ~]# kubectl get cs
    NAME                 STATUS    MESSAGE             ERROR
    controller-manager   Healthy   ok                 
    scheduler            Healthy   ok                 
    etcd-0               Healthy   {"health":"true"}
    ## 查看node就绪状态
    ### 由于还没有安装网络插件,以及node节点未加入集群,所以只显示一个master节点信息
    [root@k8s-master ~]# kubectl get nodes
    NAME         STATUS     ROLES    AGE     VERSION
    k8s-master   NotReady   master   7m33s   v1.14.1

三、部署网络插件

集群的运行依赖于网络,k8s本身并不支持网络,需要额外部署对应的网络插件,才可实现集群的个组件网络通信。我们这里采用flannel作为集群网络插件。

项目地址:https://github.com/coreos/flannel

  1. ## 在线部署
  2. [root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  3. ## 或者把清单配置文件下载本地再执行清单文件应用
  4. [root@k8s-master ~]# mkdir /opt/k8s/flannel
  5. [root@k8s-master ~]# cd /opt/k8s/flannel
  6. [root@k8s-master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  7. [root@k8s-master ~]# kubectl apply -f kube-flannel.yml

四、node节点加入集群

1)加入集群

node节点加入集群操作基本一致,这里以其中一台为例。kubeadm join命令为master节点初始化成功后显示的命令,上文已经提到过。

  1. [root@k8s-node01 ~]# swapoff -a
    [root@k8s-node01 ~]# kubeadm join 10.10.0.10: --token 5ti5kd.o32bm9lofv6zej94 \
  2. --discovery-token-ca-cert-hash sha256:cd778ad01bdbc656eaff7d3b1273691f0070ebbadd2f1b8a3189a6dc1e88f39f
[preflight] Running pre-flight checks
 [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
 [WARNING Hostname]: hostname "k8s-node01" could not be reached
 [WARNING Hostname]: hostname "k8s-node01": lookup k8s-node01 on 114.114.114.114:53: no such host
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.14" ConfigMap in the kube-system namespace
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Activating the kubelet service
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

注意:

  node节点初始化加入集群,会看到对应的初始化成功信息,初始化时由于需要下载对应pod镜像,需要等待一段时间,node才会成功加入。

2)查看节点就绪状态

  1. [root@k8s-master ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. k8s-master Ready master 139m v1.14.1
  4. k8s-node01 Ready <none> 2m8s v1.14.1
  5. k8s-node02 Ready <none> 64s v1.14.1

3)集群删除

以上就是kubeadm部署集群过程,过程其实并不复杂,如果在集群部署过程中,出现问题,想要删除重新初始化集群,使用以下命令:

  1. kubeadm reset
  2. ifconfig cni0 down && ip link delete cni0
  3. ifconfig flannel. down && ip link delete flannel.
  4. rm -rf /var/lib/cni/

特别说明:

  1)关于token失效

  上面说过,master集群初始化后,token24小时后就会失效,如果到了token失效时间,node再加入集群,需要重新生产token:

  1. ## 查看token状态
    ### TTL值 就是token生于时间
  2. [root@k8s-master ~]# kubeadm token list
  3. TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
  4. 5ti5kd.o32bm9lofv6zej94 21h --22T11::+: authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
  5. ## 重新生产token
  6. [root@k8s-master ~]# kubeadm token create
  7.   hb0mhv.ckb79uumxh06br8e
  8. ## 获取--discovery-token-ca-cert-hash值
  9. [root@k8s-master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der >/dev/null | \
  10. openssl dgst -sha256 -hex | sed 's/^.* //'
    cd778ad01bdbc656eaff7d3b1273691f0070ebbadd2f1b8a3189a6dc1e88f39f
    ## 加入集群命令
    [root@k8s-master ~]# kubeadm join 10.10.0.10:6443 --token hb0mhv.ckb79uumxh06br8e \
        --discovery-token-ca-cert-hash sha256:cd778ad01bdbc656eaff7d3b1273691f0070ebbadd2f1b8a3189a6dc1e88f39f

kubeadm 部署kubernetes1.14的更多相关文章

  1. 使用Kubeadm部署Kubernetes1.14.1集群

    一.环境说明 主机名 IP地址 角色 系统 k8s-node-1 192.170.38.80 k8s-master Centos7.6 k8s-node-2 192.170.38.81 k8s-nod ...

  2. 生产环境:ansible自动化部署kubernetes-1.14

    概述: 本文提供ansible-playbooks用来帮助读者用ansible构建二进制kubernetes1.14, 集群包含calico.nginx-ingress.HA 提供资源有kuberne ...

  3. Centos7使用kubeadm部署kubernetes-1.11.2

    1.安装方式 1.  传统方式,以下组件全部运行在系统层面(yum或者rpm包),都为系统级守护进程 2.  kubeadm方式,master和node上的组件全部运行为pod容器,k8s也为pod ...

  4. kubeadm部署kubernetes-1.12.0 HA集群-ipvs

    一.概述 主要介绍搭建流程及使用注意事项,如果线上使用的话,请务必做好相关测试及压测. 1.基础环境准备 系统:ubuntu TLS 16.04  5台 docker-ce:17.06.2 kubea ...

  5. 使用kubeadm部署kubernetes1.9.1+coredns+kube-router(ipvs)高可用集群

    由于之前已经写了两篇部署kubernetes的文章,整个过程基本一致,所以这篇只着重说一下coredns和kube-router的部署. kube version: 1.9.1 docker vers ...

  6. kubeadm 部署kubernetes1.11.1,dashboard1.10.0

    ---恢复内容开始--- 实验环境准备2台虚拟机: master节点:172.17.1.36 node节点:172.17.1.40 首先安装master节点: master 的虚拟机是全新的机器,在安 ...

  7. Kubeadm部署-Kubernetes-1.18.6集群

    环境配置 IP hostname 操作系统 10.11.66.44 k8s-master centos7.6 10.11.66.27 k8s-node1 centos7.7 10.11.66.28 k ...

  8. 使用kubeadm在CentOS上搭建Kubernetes1.14.3集群

    练习环境说明:参考1 参考2 主机名称 IP地址 部署软件 备注 M-kube12 192.168.10.12 master+etcd+docker+keepalived+haproxy master ...

  9. Kubeadm部署安装kubernetes1.12.1

    1.环境准备(这里是master) CentOS 7.6 两台配置如下,自己更改主机名,加入hosts, master和node 名字不能一样 # hostname master # hostname ...

随机推荐

  1. AdvanceEast源码理解

    目录 文章思路 源码理解 一. 标签点形式 按顺序排列四个点,逆时针旋转,且第一个点为左上角点(刚开始选择最左边的点, 二. 标签切边 三. loss计算 四. NMS 最后说明 文章思路 大神的gi ...

  2. linux环境下固定ip操作

    背景: 使用虚拟机管理软件VMvare workstation 安装好liunx虚拟机(centos)成功,下面为了固定linux的ip进行一系列设置 参考的文件有部分不是很详细,在借鉴它的基础上进行 ...

  3. ansible user模块

    查看模块的功能和选项,使用ansible-doc命令 ansible-doc options: -l #查看所有可用的模块 -m #查看模块的路径 -v #查看版本 -t TYPE #查看插件,插件: ...

  4. iptables----sport、dport解释

    以前一直对iptables的sport.dport不清楚,所以这里记录一下. (1)清理防火墙: iptables -F iptables -X iptables -Z (2)iptables命令选项 ...

  5. 深入理解WebRTC

    Web Real-Time Communication(Web实时通信,WebRTC)由一组标准.协议和JavaScript API组成,用于实现浏览器之间(端到端)的音频.视频及数据共享. WebR ...

  6. Jenkins部署maven项目到远端服务器

    jenkins服务器地址:192.168.1.203 项目部署机器地址:192.168.1.201,192.168.1.200 代码托管github 虽然比较low,但是入门是可以的! Jenkins ...

  7. 编程微语 2019-Autumn

    很多时候我们要的是[网页全屏],可是许多软件却做成了[浏览器全屏],不要一听到[全屏]就认为真的是传统意义上的全屏.拜托,老板(往往就是最大的产品经理).产品经理.程序员,想想,说清楚,做正确.某度文 ...

  8. synchronized是什么,用法及原理

    文章转Hollis博客 大家可以关注下,很多技术类型的文章 在再有人问你Java内存模型是什么,就把这篇文章发给他.中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提 ...

  9. Struts2(补充)

    关于Struts 配置文件(Struts.xml)中结果页说明 <result type=" " name=" "> </result> ...

  10. Can I prevent the Firefox developer tools network panel from clearing on page reload?

    Can I prevent the Firefox developer tools network panel from clearing on page reload? I couldn't fin ...