部署K8S集群

1.Kubernetes

1.1.概念

kubernetes(通常称为k8s)用于自动部署、扩展和管理容器化应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。支持一系列容器工具  ,包括Docker等。

1.2.特点

1)可移植:支持公有云、私有云、混合云、多重云

2)可扩展:模块化、插件化、可挂载、可组合

3)自动化:自动部署、自动重启、自动复制、自动伸缩/扩展

4)快速部署应用,快速扩展应用

5)无缝对接新的应用功能

6)节约资源、优化硬件资源的使用

2.kubernetes中的相关概念

2.1.Cluster

计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用

2.2Master

是Cluster的大脑,主要职责是调度,即决定将应用放在哪里运行。Master运行Linux操作系统,可以是物理机或者虚拟机。为了是实现高可用,可以运行多个Master。

2.3Node

职责是运行容器应用。Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 运行在 Linux 操作系统,可以是物理机或者是虚拟机。

2.4Pod

Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行。

2.5Controller

Kubernetes 通常不会直接创建 Pod,而是通过 Controller 来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。为了满足不同的业务场景,Kubernetes 提供了多种 Controller,包括 Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job 等,

Deployment 是最常用的 Controller,比如前面在线教程中就是通过创建 Deployment 来部署应用的。Deployment 可以管理 Pod 的多个副本,并确保 Pod 按照期望的状态运行。

ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,我们通常不需要直接使用 ReplicaSet。

DaemonSet 用于每个 Node 最多只运行一个 Pod 副本的场景。正如其名称所揭示的,DaemonSet 通常用于运行 daemon。

StatefuleSet 能够保证 Pod 的每个副本在整个生命周期中名称是不变的。而其他 Controller 不提供这个功能,当某个 Pod 发生故障需要删除并重新启动时,Pod 的名称会发生变化。同时 StatefuleSet 会保证副本按照固定的顺序启动、更新或者删除。

Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。

3.kubernetes核心组件

3.1组件组成

3.2组件架构图

4.kubernetes分层

4.1分层架构

4.2分层说明

5.部署K8s集群

5.1环境准备

[[email protected] ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[[email protected] ~]# uname -r

3.10.0-693.el7.x86_64

[[email protected] ~]# getenforce

Disabled

[[email protected] ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

Active: inactive (dead)

Docs: man:firewalld(1)

5.2主机IP规划

5.3安装docker(所有节点)

5.3.1.安装辅助包

yum install -y device-mapper-persistent-data lvm2 yum-utils

5.3.2 创建docker源

yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

5.3.3安装docker

yum install -y docker-ce-17.03.2.ce-1.el7.centos docker-ce-selinux-17.03.2.ce-1.el7.centos

5.3.4启动docker

systemctl enable docker && systemctl start docker

5.4关闭防火墙,关闭selinux(所有节点)

5.5关闭swap(所有节点)

[[email protected] ~]# swapoff -a

[[email protected] ~]# cat /etc/fstab

#

# /etc/fstab

# Created by anaconda on Thu Apr 19 20:09:56 2018

#

# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/centos-root /                       xfs     defaults        0 0

UUID=bef47783-f47e-49a4-ba44-74ee4cbc8606 /boot                   xfs     defaults        0 0

#/dev/mapper/centos-swap swap                    swap    defaults        0 0

5.6配置k8s路由(所有节点)

[[email protected] ~]# cat /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

[[email protected] ~]# sysctl --system

5.7安装k8s组件(所有节点)

5.7.1创建k8s源

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

5.7.2安装组件

yum install -y kubeadm kubectl kubelet

由于作者所使用的网络无法×××,因此将相关镜像与安装包打包上传到虚拟机,使用rpm安装。

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

rpm -ivh kubectl-1.9.0-0.x86_64.rpm

rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

装载k8s镜像

docker load -i /root/k8s/docker_images/*.tar

5.7.3启动kubelet并设置自启动(只在master节点操作)

[[email protected] ~]# systemctl enable kubelet && systemctl start kubelet

如果启动报错,解决方案

[[email protected] ~]# docker info | grep Cgroup

Cgroup Driver: cgroupfs

[[email protected] ~]# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

[Service]

Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"

Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"

Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"

Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"

Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"

Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"

ExecStart=

ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS

5.8设置各个节点的hosts

cat /etc/hosts

10.0.0.11 k8s-master

10.0.0.12 k8s-node-1

10.0.0.13 k8s-node-2

5.9在master节点设置ssl(参考文档:https://blog.51cto.com/13520761/2095798)

ssh-keygen

ssh-copy-id k8s-node-1

ssh-copy-id k8s-node-2

5.10初始化(只在master节点操作)

[[email protected] ~]# kubeadm init --apiserver-advertise-address=10.0.0.11 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.9.0

5.11验证k8s安装

[[email protected] ~]# kubeadm version

转自https://blog.51cto.com/13520761/2112274

原文地址:https://www.cnblogs.com/cangqinglang/p/11369818.html

时间: 2024-11-02 13:48:03

部署K8S集群的相关文章

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver

使用kubeadm部署k8s集群08-配置LB指向kube-apiserver 2018/1/4 配置 LB 指向 kube-apiserver 小目标:在 3 个 master 节点前,还需配置一个 LB 来作为 apiserver 的入口 LB -> master x3 直接使用阿里云内网 SLB L4 proxy 资源(本次实例是 4 层而不使用 7 层的原因是:跳过了处理证书的环节) 申请下来资源后,将得到一个 vip 指向上述 3 个 master 节点的 IP 作为后端真实服务器 注

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver

使用kubeadm部署k8s集群05-配置kubectl访问kube-apiserver 2018/1/4 配置 kubectl 访问 kube-apiserver 切换 master 节点连接到本节点的 apiserver 确认集群信息 切换 master 节点连接到本节点的 apiserver ### 为了在这 2 个新的节点执行 kubectl 需要配置 admin.yaml [[email protected] ~]# mkdir -p ~/k8s_install/master/admi

使用kubeadm部署k8s集群01-初始化

使用kubeadm部署k8s集群01-初始化 2018/1/3 节点配置 master x3 OS version: centos7 swapoff ### 阿里云默认:off hosts ### 每个节点上配置: [[email protected] ~]# cat /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 Docker version: latest(17.0

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点

使用kubeadm部署k8s集群07-扩容kube-scheduler到3节点 2018/1/4 扩容 kube-scheduler 到 3 节点 连接到本节点的 apiserver [[email protected] kube-controller-manager]# cat /etc/kubernetes/manifests/kube-scheduler.yaml |grep '/etc/kubernetes' --kubeconfig=/etc/kubernetes/scheduler.

使用kubeadm部署k8s集群09-配置worker节点

使用kubeadm部署k8s集群09-配置worker节点 2018/1/4 配置 worker 节点 初始化 加入集群 切换 worker 节点连接到 apiserver 的 LB 入口 调整集群中节点角色和调度策略 初始化 /etc/hosts ### k8s master @envDev 10.10.9.67 tvm-00 10.10.9.68 tvm-01 10.10.9.69 tvm-02 k8s worker @envDev 10.10.9.74 tvm-0310.10.9.75 t

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点

使用kubeadm部署k8s集群03-扩容kube-apiserver到3节点 2018/1/3 扩容 kube-apiserver 到 3 节点 配置 kube-apiserver.yaml 分析 kube-apiserver 依赖的证书 为新节点生成专属证书 下发证书到对应的节点 确认每个节点的 apiserver 是否处于 Running 状态 配置 kube-apiserver.yaml ### 拷贝原 master 上的配置: [[email protected] ~]# mkdir

使用kubeadm部署k8s集群02-配置etcd高可用

使用kubeadm部署k8s集群02-配置etcd高可用 2018/1/4 配置 etcd 高可用 新建一个 2 节点的 etcd cluster 查看 etcd 的状态 迁移原来 master 节点上的 etcd 数据到上面新建的 etcd cluster 中 切换 kube-apiserver 使用新的 etcd endpoint 地址 清理掉原来的单节点 etcd 服务 重建一个 etcd 服务,加入新集群 部署新的 etcd 节点 更新另外2个节点的 etcd.yaml 配置 新建一个

使用kubeadm部署k8s集群00-缓存gcr.io镜像

使用kubeadm部署k8s集群00-缓存gcr.io镜像 2018/2/7 原因:kubeadm init 时,需要下载一些镜像,但国内网络原因,大家懂的,不容易下载,此时,只能去绕过它.备注:官方在 1.5 收到阿里一位童鞋的 PR 来允许指定一个第三方的 registry 来解决上述问题,但因为时间所限,并未找到具体的操作方法. [在国外节点上操作] 镜像来源 针对下述镜像: gcr.io/google_containers/kube-apiserver-amd64:v1.9.0 gcr.

Kubernetes学习之路(一)之Kubeadm部署K8S集群

一个星期会超过多少阅读量呢??发布一篇,看看是否重新在51上写学习博文,有老铁支持嘛?? 使用kubeadm部署集群 节点名称 ip地址 部署说明 Pod 网段 Service网段 系统说明 k8s-master 192.168.56.11 docker.kubeadm.kubectl.kubelet 10.244.0.0/16 10.96.0.0/12 Centos 7.4 k8s-node01 192.168.56.12 docker.kubeadm.kubelet 10.244.0.0/1