部署k8s集群

author author     2022-11-09     468

关键词:

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]ter ~]# 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(参考文档:http://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

第二篇:二进制部署k8s集群进阶使用

二进制部署K8s集群进阶使用之第1节关于K8s证书二进制部署K8s集群进阶使用之第2节kubectl-陈述式资源管理二进制部署K8s集群进阶使用之第3节kubectl-声明式资源管理二进制部署K8s集群进阶使用之第4节pod控制器 查看详情

在k8s集群部署elk(代码片段)

在k8s集群部署ELK目录1准备环境使用kubeadm或者其他方式部署一套k8s集群。在k8s集群创建一个namespace:halashowkubectlcreatenshalashow2ELK部署架构3部署elasticSearch这是一个单节点部署,高可用方案我在研究研究。。。es与mysql的概念对应关... 查看详情

k8s集群架构的二进制部署——k8s集群学习的基础(代码片段)

K8S集群架构的二进制部署一、部署etcd二、部署docker引擎三、flannel网络配置四、部署master组件五、node节点部署一、部署etcdMaster上操作[root@192etcd-cert]#cd/usr/local/bin/[root@192bin]#rz-E(cfsslcfssl-certinfocfssljson)[root 查看详情

rancher三节点k8s集群部署例子

rancher三节点k8s集群部署例子待办https://rorschachchan.github.io/2019/07/25/使用Rancher2-1部署k8s/ 查看详情

k8s部署zookeeper集群

参考技术A记录Kubernetes使用StatefulSet方式部署Zookeeper集群。使用动态PVC,PVC创建过程略过Yaml文件包含configmap、service、StatefulSet。vimzookeeper-test.yaml更新资源清单查看创建的资源清单查看zookeeper配置查看集群状态Zookeeper集群部署完成... 查看详情

高可用集群篇--k8s部署微服务(代码片段)

高可用集群篇(五)--K8S部署微服务一、K8S有状态服务1.1什么是有状态服务1.2k8s部署MySQL1.2.1创建MySQL主从服务1.2.2测试主从配置1.2.3k8s部署总结(*)1.3k8s部署Redis1.4k8s部署ElasticSearch&Kibana1.4.1部署ElasticSearch1.5部署k... 查看详情

企业运维实战-k8s学习笔记17.k8s集群+prometheus监控部署基于prometheus实现k8s集群的hpa动态伸缩虚拟机部署prometheus监控(代码片段)

企业运维实战-k8s学习笔记17.k8s集群+Prometheus监控部署、基于prometheus实现k8s集群的hpa动态伸缩一、Prometheus简介二、Prometheus+k8s部署1.k8s集群部署Prometheus2.设定Prometheus监控应用nginx3.基于prometheus实现k8s集群的hpa动态伸缩三、虚... 查看详情

k8s之集群部署(二进制部署)(代码片段)

...所示1. master节点2. node节点3. etcd存储  部署master.com节点根据上图所示,master节点分为三个组件(apiserver、controller-manager、scheduler)apiserver:k8s集群的总入口,基于hppts通讯。所以要部署证书。 第一步:准备k... 查看详情

k8s多master集群二进制部署(代码片段)

k8s多Master集群二进制部署一、k8s多Master集群高可用方案1、高可用实现方案2、多Master高可用的搭建过程二、多master节点集群搭建(master02节点部署)三、负载均衡部署四、k8s的网站管理系统(DashboardUI)1、Dashboard介... 查看详情

部署k8s集群

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

kubernetes系列03—kubeadm安装部署k8s集群

...法) 优点:你只要安装kubeadm即可;kubeadm会帮你自动部署安装K8S集群;如:初始化K8S集群、配置各个插件的证书认证、部署集群网络等。安装简易。 缺点: 查看详情

k8s集群架构的kubeadm部署dashboard和harbor仓库部署(代码片段)

K8S集群架构的kubeadm部署、dashboard和Harbor仓库部署一、kubeadm部署K8S集群架构实验准备工作:1.1环境准备1.2所有节点安装docker1.3master和node节点安装kubeadm,kubelet和kubectl1.4部署K8S集群二、dashboard部署2.1所有节点安装dashboard2.2... 查看详情

k8s集群架构的kubeadm部署dashboard和harbor仓库部署(代码片段)

K8S集群架构的kubeadm部署、dashboard和Harbor仓库部署一、kubeadm部署K8S集群架构实验准备工作:1.1环境准备1.2所有节点安装docker1.3master和node节点安装kubeadm,kubelet和kubectl1.4部署K8S集群二、dashboard部署2.1所有节点安装dashboard2.2... 查看详情

k8s集群中部署jenkins(代码片段)

本文介绍在k8s环境中进行jenkinsserver的部署和配置。Jenkins是一个开源的、功能强大的持续集成和持续构建工具,采用master和salve架构,我们通过将jenkins集成环境部署在k8s集群中,可以实现jenkinsslave按需创建、动态的伸缩。同时也... 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情

云原生之kubernetes实战使用sealos部署k8s集群环境

【云原生之kubernetes实战】使用Sealos部署k8s集群一、Sealos介绍1.Sealos简介2.Sealos特性3.Sealos图示二、本地k8s节点环境1.节点规划2.节点系统版本三、下载Sealos工具包四、初始环境配置1.关闭防火墙和selinux2.配置host文件解析3.配置时间... 查看详情

kubeadm部署k8s集群(代码片段)

Kubeadm部署k8s一.环境准备二.所有节点安装docker三.所有节点安装kubeadm,kubelet和kubectl四.部署K8S集群五.安装dashboard六.安装Harbor私有仓库七.内核参数优化方案一.环境准备master(2C/4G,cpu核心数要求大于2) 192.168.116.60... 查看详情

kubeadm部署k8s集群(代码片段)

Kubeadm部署k8s一.环境准备二.所有节点安装docker三.所有节点安装kubeadm,kubelet和kubectl四.部署K8S集群五.安装dashboard六.安装Harbor私有仓库七.内核参数优化方案一.环境准备master(2C/4G,cpu核心数要求大于2) 192.168.116.60... 查看详情