kubernetes_k8s

  • 主要内容
  • 1、kubernetes简介
  • (1)kubernetes 基本介绍
  • (2)k8s 集群架构组件
  • (3)k8s核心概念
  • 2、kubernetes集群搭建
  • (1)搭建k8s集群部署方式
  • (2)搭建k8s环境平台规划
  • (3)准备环境
  • (4)环境基础安装
  • (4)部署 Kubernetes Master
  • (5)将Node加入Kubernetes
  • (6)部署CNI网络插件
  • (7)测试kubernetes集群
  • 离线安装


主要内容

1、kubernetes简介

(1)kubernetes 基本介绍

kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源 的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的 应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种 机制。传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配 置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等 操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于 可移植性。 新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件 系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署, 由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进 行迁移。容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间 成一对一关系也使容器有更大优势,使用容器可以在 build 或 release 的阶段,为应用创 建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构, 这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”, 这更便于监控和管理。 Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、 应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便 对应用请求进行负载均衡。 在 Kubernetes 中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通 过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需 要运维人员去进行复杂的手工配置和处理。

(2)k8s 集群架构组件

master (主控节点)和node (工作节点)
master有四个
node有两个

k8s集群部署elk Helm k8s集群部署代做_docker

  1. master组件
  • apiserver
    集群统一入口,以restful方式,交给etcd存储
  • schedulcr
    节点调度,选择node节点应用部署
  • controller-maTageI
    处理集群中常规后台任务。—个资源对应—个控制器
  • etcd
    存储系统,用于保存集群相关的数据
  1. node组件
  • kubeelet
    master排到node节点代表,管理本机容器
  • kube-proxy
    提供网络代理,负载均衡等操作

(3)k8s核心概念

1、Pod

最小部署单元
—组容器的集合
共享网络
生命周期是短暂的

2、controller

确保预期的pod副本数量
无状态应用部署
有状态应用部署
确保所有的node运行同一个pod
一次性任务和定时任务

3、Service

定义一组pod的访间规则

2、kubernetes集群搭建

(1)搭建k8s集群部署方式

(1)kubeadm :

  • Kubeadm 是一个 K8s 部署工具,提供 kubeadm init 和 kubeadm join,用于快速部 署 Kubernetes 集群。
    官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

(2)二进制:

  • 二进制包 从 github 下载发行版的二进制包,手动部署每个组件,组成 Kubernetes 集群。 Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可 控,推荐使用二进制包部署 Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很 多工作原理,也利于后期维护

(2)搭建k8s环境平台规划

  1. 安装要求
  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB 或更多 RAM,2 个 CPU 或更多 CPU,硬盘 30GB 或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止 swap 分区
  1. 最终目标
  • (1) 在所有节点上安装 Docker 和 kubeadm
  • (2)部署 Kubernetes Master
  • (3)部署容器网络插件
  • (4)部署 Kubernetes Node,将节点加入 Kubernetes 集群中
  • (5)部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

(3)准备环境

  • 其他的系统基础优化如关闭防火墙之类的就不说了
  1. 准备三台机器:
    可自定义ip段

k8s-master 10.0.0.11
k8s-node1 10.0.0.12
k8s-node2 10.0.0.13

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
  1. 系统初始化

关闭 swap:
临时

swapoff -a

永久

vim /etc/fstaborsed -ri 's/.*swap.*/#&/' /etc/fstab

  1. 在 master 添加 hosts:

cat >> /etc/hosts << EOF 10.0.0.11 k8s-master 10.0.0.12 k8s-node1 10.0.0.13 k8s-node2 EOF

  1. 将桥接的 IPv4 流量传递到 iptables 的链:

echo 'net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1' > /etc/sysctl.d/k8s.conf

生效:

sysctl --system

  1. 时间同步:

yum install ntpdate -y ntpdate time.windows.com

(4)环境基础安装

一. 所有节点安装 Docker/kubeadm/kubelet

  • Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。
  1. 安装 Docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum -y install docker-ce-18.06.1.ce-3.el7 systemctl enable docker && systemctl start docker docker --version

  1. 添加阿里云 YUM 软件源 设置仓库地址

cat > /etc/docker/daemon.json << EOF { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } EOF

重启:

systemctl restart docker.service

  1. 添加 yum 源

cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

  1. 由于版本更新频繁,这里指定版本号部署∶

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubect1-1.18.0systemctl enable kubelet

(4)部署 Kubernetes Master

  • 在 10.0.0.11(Master)执行
  1. 拉取镜像

kubeadm init \ --apiserver-advertise-address=10.0.0.11 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.18.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16

  • 此处报错说明配置不够,至少2H2G.
  • 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
  • apiserver…是Master自己ip
  • 后面两个随便设置,只要不冲突
  1. 使用kubectl工具创建环境∶以下代码在如上图 1处

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

  1. 查看集群

$ kubectl get nodes

(5)将Node加入Kubernetes

在10.0.0.12/13 ( Node )执行。

  • 向集群添加新节点,以下代码如上图(2)处

kubeadm join 10.0.0.11:6443 --token 80rwqa.xlh30tmkapc2op78 \ --discovery-token-ca-cert-hash sha256:6c8a7931d64a44dd3c1bd9f5eb5d54b63f3ba07ad083ec889371eb30c4c99504

  • 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新>创建token,操作如下:

kubeadm token create --print-join-command

(6)部署CNI网络插件

  • 如果默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
  • 安装网络插件

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

  • 查看:等一会待下面所有都Running
    kubectl get pods -n kube-system
  • Running后查看集群显示Ready就说明已经搭好了

kubectl get nodes

(7)测试kubernetes集群

  • 在Kubernetes集群中创建一个pod,验证是否正常运行∶

$ kubectl create deployment nginx --image=nginx $ kubectl expose deployment nginx --port=80 --type=NodePort

用pod的svc可以看到分配的30908随机端口
$ kubectl get pod,svc

k8s集群部署elk Helm k8s集群部署代做_docker_02


然后通过任意node节点ip加端口访问,出现nginx欢迎界面就成功了


http://10.0.0.12:30908/


http://10.0.0.13:30908/


> 访问地址:http://NodelP:Port

离线安装

准备环境

swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

cat >> /etc/hosts << EOF
10.0.0.21 k8s-master 
10.0.0.22 k8s-node1 
EOF

yum -y install ipvsadm ipset sysstat conntrack libseccomp

cat >> /etc/docker/daemon.json << EOF
{
 "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

准备docker安装包

containerd.io-1.6.4-3.1.el7.x86_64.rpm
docker-ce-cli-20.10.9-3.el7.x86_64.rpm
container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
docker-ce-rootless-extras-20.10.9-3.el7.x86_64.rpm
docker-ce-20.10.9-3.el7.x86_64.rpm
docker-scan-plugin-0.9.0-3.el7.x86_64.rpm
yum install *.rpm
systemctl enable docker && systemctl start docker

准备k8s安装包

07f7583cfe98238a882f1bb1182a6f356177a8d99a4439b8df019b97e57accc4-kubeadm-1.20.14-0.x86_64.rpm
09c4223a0bdb890ea6ee283bd5fb760f00652acd9f7f212736f59da8b6f8f1d1-kubelet-1.20.14-0.x86_64.rpm
81c8757b7bc56c9df9a04d7f0ad8733391138b45502881b465aed620e2f1ebfc-kubectl-1.20.14-0.x86_64.rpm
db7cb5cb0b3f6875f54d10f02e625573988e3e91fd4fc5eef0b1876bb18604ad-kubernetes-cni-0.8.7-0.x86_64.rpm
rpm -ivh *.rpm --nodeps
systemctl enable kubelet.service

准备镜像

coredns.tar
etcd.tar
kube-apiserver.tar
kube-controller-manager.tar
kube-proxy.tar
kube-scheduler.tar
mirrored-flannelcni-flannel-cni-plugin.tar
mirrored-flannelcni-flannel.tar
pause.tar
cd InstallPackages/k8s/images/
for i in `ls`;do docker image load  -i $i;done

初始化

kubeadm init \
--apiserver-advertise-address=10.0.0.21 \
--kubernetes-version=v1.20.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
kubeadm reset
rm -rf $HOME/.kube

准备网络插件

kubectl apply -f  kube-flannel.yml
kubectl apply -f