部署

使用 kubeadm 安装kubernetes集群。

组件分布

部署环境

kubeadm 步骤

  1. master, node: 安装 kubelet, kubeadm, docker
  2. master: kubeadm init 初始化
  3. nodes: kubeadm join 加入集群 参考文章

基础环境

主机名 角色 IP 系统版本 内核版本
master.kubernetes master 10.0.20.20 CentOS 7.5 5.1.4-1.el7.elrepo.x86_64
node01.kubernetes node01 10.0.20.21 CentOS 7.5 5.1.4-1.el7.elrepo.x86_64
node02.kubernetes node02 10.0.20.22 CentOS 7.5 5.1.4-1.el7.elrepo.x86_64
node03.kubernetes node03 10.0.20.23 CentOS 7.5 5.1.4-1.el7.elrepo.x86_64

基础配置

针对所有机器操作

配置添加hosts

  1. cat /etc/hosts
  2. 10.0.20.20 master master.kubernetes
  3. 10.0.20.21 node01 node01.kubernetes
  4. 10.0.20.22 node02 node02.kubernetes
  5. 10.0.20.23 node03 node03.kubernetes

关闭防火墙

  1. systemctl disable firewalld
  2. systemctl stop firewalld

禁用SELINUX

  1. setenforce 0
  2. vi /etc/selinux/config
  3. SELINUX=disabled

创建/etc/sysctl.d/k8s.conf文件,添加如下内容

  1. net.bridge.bridge-nf-call-ip6tables = 1
  2. net.bridge.bridge-nf-call-iptables = 1
  3. net.ipv4.ip_forward = 1
  4. # 执行命令使修改生效
  5. modprobe br_netfilter
  6. sysctl -p /etc/sysctl.d/k8s.conf

kube-proxy开启ipvs的前置条件

node01node02node03上执行以下脚本

由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块

  1. ip_vs
  2. ip_vs_rr
  3. ip_vs_wrr
  4. ip_vs_sh
  5. nf_conntrack_ipv4
  1. cat > /etc/sysconfig/modules/ipvs.modules <<EOF
  2. #!/bin/bash
  3. modprobe -- ip_vs
  4. modprobe -- ip_vs_rr
  5. modprobe -- ip_vs_wrr
  6. modprobe -- ip_vs_sh
  7. modprobe -- nf_conntrack
  8. EOF
  9. chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

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

接下来还需要确保各个节点上已经安装了ipset软件包yum install ipset。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm yum install ipvsadm。

如果以上前提条件如果不满足,则即使kube-proxy的配置开启了ipvs模式,也会退回到iptables模式。

安装基础组件

配置yum

在所有节点上执行

  1. # cat /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes Repo
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. gpgcheck=0
  1. # cat /etc/yum.repos.d/docker-ce.repo
  2. [docker-ce-stable]
  3. name=Docker CE Stable - $basearch
  4. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
  5. enabled=1
  6. gpgcheck=1
  7. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  8. [docker-ce-stable-debuginfo]
  9. name=Docker CE Stable - Debuginfo $basearch
  10. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
  11. enabled=0
  12. gpgcheck=1
  13. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  14. [docker-ce-stable-source]
  15. name=Docker CE Stable - Sources
  16. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
  17. enabled=0
  18. gpgcheck=1
  19. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  20. [docker-ce-edge]
  21. name=Docker CE Edge - $basearch
  22. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
  23. enabled=0
  24. gpgcheck=1
  25. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  26. [docker-ce-edge-debuginfo]
  27. name=Docker CE Edge - Debuginfo $basearch
  28. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
  29. enabled=0
  30. gpgcheck=1
  31. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  32. [docker-ce-edge-source]
  33. name=Docker CE Edge - Sources
  34. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
  35. enabled=0
  36. gpgcheck=1
  37. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  38. [docker-ce-test]
  39. name=Docker CE Test - $basearch
  40. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
  41. enabled=0
  42. gpgcheck=1
  43. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  44. [docker-ce-test-debuginfo]
  45. name=Docker CE Test - Debuginfo $basearch
  46. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
  47. enabled=0
  48. gpgcheck=1
  49. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  50. [docker-ce-test-source]
  51. name=Docker CE Test - Sources
  52. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
  53. enabled=0
  54. gpgcheck=1
  55. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  56. [docker-ce-nightly]
  57. name=Docker CE Nightly - $basearch
  58. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
  59. enabled=0
  60. gpgcheck=1
  61. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  62. [docker-ce-nightly-debuginfo]
  63. name=Docker CE Nightly - Debuginfo $basearch
  64. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
  65. enabled=0
  66. gpgcheck=1
  67. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
  68. [docker-ce-nightly-source]
  69. name=Docker CE Nightly - Sources
  70. baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
  71. enabled=0
  72. gpgcheck=1
  73. gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

安装组件

master上执行

  1. yum install docker-ce kubelet kubeadm kubectl -y
  2. # 安装完成后,配置忽略Swap
  3. cat /etc/sysconfig/kubelet
  4. KUBELET_EXTRA_ARGS="--fail-swap-on=false"

node01 node02 node03 上执行

  1. yum install docker-ce kubelet kubeadm -y

初始化 master

这里都在 master 上操作

说明: 很重要,由于kubeadm 初始化的时候,默认拉取的镜像访问不了,我把master所需要的镜像已经准备好。

可以在 百度云盘地址 提取码:a4z9

导入镜像

先把下载好的镜像上传到master服务器上,然后导入到docker中。

  1. [root@master kubernetes.1.15]# ll
  2. total 869812
  3. -rw------- 1 root root 40542720 Jul 9 13:54 coredns-1.3.tar
  4. -rw------- 1 root root 258365952 Jul 9 13:54 etcd-3.3.tar
  5. -rw------- 1 root root 55390720 Jul 9 15:58 flannel-0.11.tar
  6. -rw------- 1 root root 208382464 Jul 9 14:27 kube-apiserver-1.15.tar
  7. -rw------- 1 root root 160282112 Jul 9 13:53 kube-controller-manager-1.15.tar
  8. -rw------- 1 root root 84278272 Jul 9 13:52 kube-proxy-1.15.tar
  9. -rw------- 1 root root 82671104 Jul 9 13:53 kube-scheduler-1.15.tar
  10. -rw------- 1 root root 754176 Jul 9 13:54 pause-3.1.tar
  1. # 导入镜像
  2. docker load --input coredns-1.3.tar
  3. docker load --input etcd-3.3.tar
  4. docker load --input flannel-0.11.tar
  5. docker load --input kube-apiserver-1.15.tar
  6. docker load --input kube-controller-manager-1.15.tar
  7. docker load --input kube-proxy-1.15.tar
  8. docker load --input kube-scheduler-1.15.tar
  9. docker load --input pause-3.1.tar

执行命令:

  1. [root@master ~]# kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
  2. .....
  3. Your Kubernetes control-plane has initialized successfully!
  4. To start using your cluster, you need to run the following as a regular user:
  5. mkdir -p $HOME/.kube
  6. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  7. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  8. You should now deploy a pod network to the cluster.
  9. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  10. https://kubernetes.io/docs/concepts/cluster-administration/addons/
  11. Then you can join any number of worker nodes by running the following on each as root:
  12. kubeadm join 10.0.20.20:6443 --token cgw8vp.c2gw34c6lc2jvw18 \
  13. --discovery-token-ca-cert-hash sha256:ada6c11ac45aadf7581baab773e7ab172bed8fc0df85ff38299a0c5dcb6538ad

注意 最后会输出上面显示的,这里要保留好,之后添加node的时候,用到的,否则添加不了node

按照初始化最后的提示执行

  1. [root@master ~]# mkdir -p $HOME/.kube
  2. [root@master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

查看组件状态

  1. [root@master ~]# kubectl get cs
  2. NAME STATUS MESSAGE ERROR
  3. scheduler Healthy ok
  4. controller-manager Healthy ok
  5. etcd-0 Healthy {"health":"true"}

查看node状态

  1. [root@master ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master.kubernetes NoReady master 66m v1.15.0

这里看到master的状态是NoReady,是因为没有安装flannel导致的,下面安装

安装flannel网络

执行:

  1. [root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  2. podsecuritypolicy.extensions/psp.flannel.unprivileged created
  3. clusterrole.rbac.authorization.k8s.io/flannel created
  4. clusterrolebinding.rbac.authorization.k8s.io/flannel created
  5. serviceaccount/flannel created
  6. configmap/kube-flannel-cfg created

稍等后再次查看master状态

  1. [root@master ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master.kubernetes Ready master 66m v1.15.0

查看系统命名空间的pods状态

  1. [root@master ~]# kubectl get pods -n kube-system
  2. NAME READY STATUS RESTARTS AGE
  3. coredns-5c98db65d4-8mzfz 1/1 Running 0 4m
  4. coredns-5c98db65d4-spjx8 1/1 Running 0 4m6s
  5. etcd-master.kubernetes 1/1 Running 0 7m24s
  6. kube-apiserver-master.kubernetes 1/1 Running 0 7m23s
  7. kube-controller-manager-master.kubernetes 1/1 Running 0 7m32s
  8. kube-flannel-ds-amd64-wjczq 1/1 Running 0 48s
  9. kube-proxy-rmckk 1/1 Running 0 8m14s
  10. kube-scheduler-master.kubernetes 1/1 Running 0 7m33s

此时master已经初始化完成。

初始化 node

同样,先导入node所需的镜像到docker中,然后在执行个初始化命令

本次在node01 node02 node03 上执行

三个node节点操作相同

  1. [root@node01 kubernetes.1.15]# ll
  2. total 612216
  3. -rw------- 1 root root 55390720 Jul 9 15:58 flannel-0.11.tar
  4. -rw------- 1 root root 82671104 Jul 9 13:53 kube-scheduler-1.15.tar
  5. -rw------- 1 root root 754176 Jul 9 13:54 pause-3.1.tar
  6. [root@node01 kubernetes.1.15]# docker image ls
  7. REPOSITORY TAG IMAGE ID CREATED SIZE
  8. k8s.gcr.io/kube-proxy v1.15.0 d235b23c3570 2 weeks ago 82.4MB
  9. quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 5 months ago 52.6MB
  10. k8s.gcr.io/pause 3.1 da86e6ba6ca1 18 months ago 742kB

初始化

执行下列命令:

  1. [root@node01 ~]# kubeadm join 10.0.20.20:6443 --token cgw8vp.c2gw34c6lc2jvw18 --discovery-token-ca-cert-hash sha256:ada6c11ac45aadf7581baab773e7ab172bed8fc0df85ff38299a0c5dcb6538ad
  2. [preflight] Running pre-flight checks
  3. [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/
  4. [preflight] Reading configuration from the cluster...
  5. [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
  6. [kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.15" ConfigMap in the kube-system namespace
  7. [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
  8. [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
  9. [kubelet-start] Activating the kubelet service
  10. [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
  11. This node has joined the cluster:
  12. * Certificate signing request was sent to apiserver and a response was received.
  13. * The Kubelet was informed of the new secure connection details.
  14. Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

看到上面的最后提示,则表示完成,然后等一会儿后,在master查看效果如下:

master 验证

  1. [root@master ~]# kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master.kubernetes Ready master 84m v1.15.0
  4. node01.kubernetes Ready <none> 38m v1.15.0
  5. node02.kubernetes Ready <none> 38m v1.15.0
  6. node03.kubernetes Ready <none> 40m v1.15.0
  1. [root@master ~]# kubectl get pods -n kube-system
  2. NAME READY STATUS RESTARTS AGE
  3. coredns-5c98db65d4-8mzfz 1/1 Running 0 80m
  4. coredns-5c98db65d4-spjx8 1/1 Running 0 80m
  5. etcd-master.kubernetes 1/1 Running 0 83m
  6. kube-apiserver-master.kubernetes 1/1 Running 0 83m
  7. kube-controller-manager-master.kubernetes 1/1 Running 0 83m
  8. kube-flannel-ds-amd64-4szk7 1/1 Running 0 40m
  9. kube-flannel-ds-amd64-b4ssp 1/1 Running 0 38m
  10. kube-flannel-ds-amd64-nmklz 1/1 Running 0 39m
  11. kube-flannel-ds-amd64-wjczq 1/1 Running 0 77m
  12. kube-proxy-8fqsz 1/1 Running 0 39m
  13. kube-proxy-bkrw4 1/1 Running 0 40m
  14. kube-proxy-n75g8 1/1 Running 0 38m
  15. kube-proxy-rmckk 1/1 Running 0 84m
  16. kube-scheduler-master.kubernetes 1/1 Running 0 83m
  1. [root@master ~]# kubectl get ns
  2. NAME STATUS AGE
  3. default Active 85m
  4. kube-node-lease Active 85m
  5. kube-public Active 85m
  6. kube-system Active 85m

02-kubeadm初始化Kubernetes集群的更多相关文章

  1. 3、kubeadm初始化Kubernetes集群

    同步时间 # ntpdate time.nist.gov k8s集群组成 k8s部署环境  https://kubernetes.io/docs/setup/independent/create-cl ...

  2. kubeadm初始化kubernetes集群

    有两种方式安装集群: 1.手动安装各个节点的各个组件,安装极其复杂困难. 2.使用工具:kubeadm kubeadm 是官方提供的专门部署集群的管理工具. 1. 在kubeadm下每个节点都需要安装 ...

  3. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  4. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  5. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

  6. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  7. Kubernetes 学习3 kubeadm初始化k8s集群

    一.k8s集群 1.k8s整体架构图 2.k8s网络架构图 二.基于kubeadm安装k8s步骤 1.master,nodes:安装kubelet,kubeadm,docker 2.master: k ...

  8. 使用kubeadm部署Kubernetes集群

    一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...

  9. kubeadm部署Kubernetes集群

    Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...

随机推荐

  1. c#通过libreOffice实现 office文件转pdf文件

    一.安装libreOffice 点击官网下载libreOffice 二.创建一个新的项目LibreOffice 创建一个新的项目,方便后面调用 添加下面代码 public class OfficeCo ...

  2. WPF项目设计规则

    关于WPF应用程序的设计: 项目构成,自上而下: 1. 前端的WPF应用程序项目. 2. 业务逻辑的类库项目. 3. 映射到数据库各个表的Model型类库,(数据库操作接口定义). 4. 其他工具型类 ...

  3. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示

    目录管理命令ls:列出指定目录下的内容格式: ls [OPTION]... [FILE]...   -a:显示所有文件包括隐藏文件   -A:显示除.和..之外的所有文件   -l,--long:显示 ...

  4. Asp.net Core 系列之--1.事件驱动初探:简单事件总线实现(SimpleEventBus)

    ChuanGoing 2019-08-06  前言 开篇之前,简单说明下随笔原因.在园子里游荡了好久,期间也起过要写一些关于.NET的随笔,因各种原因未能付诸实现. 前段时间拜读daxnet的系列文章 ...

  5. 原生JS实现双向链表

    1.前言 双向链表和单向链表的区别在于,在链表中,一个节点只有链向下一个节点的链接,而在双向链表中,链接是双向的:一个链向下一个元素,另一个链向前一个元素,如下图所示: 从图中可以看到,双向链表中,在 ...

  6. 1000m交叉网线最简单做法

    1-3,2-6,3-1,4-7,5-8,6-2,7-4,8-5 1,2,3,4,5,6,7,8即为网线内部8跟线编号,两头颜色和数字要对应.

  7. PHP压缩文件夹的方法

    PHP压缩文件夹的方法<pre> public function addFileToZip($path, $zip) { $handler = opendir($path); //打开当前 ...

  8. mysql字符集那些事

    1..查看mysql当前使用的字符集. 登录mysql 在mysql 里输入 show variables like 'character_set%' mysql> show variables ...

  9. nyoj 64-鸡兔同笼 (解二元一次方程)

    64-鸡兔同笼 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:26 submit:58 题目描述: 已知鸡和兔的总数量为n,总腿数为m.输入n和m, ...

  10. python的文件操作及简单的用例

    一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...