Kubernetes集群部署

Kubernetes简介

  1. 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应 用了很多年,Borg系统运行管理着成千上万的容器应用
  2. Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了 Borg系统中的经验和教训。
  3. Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将 最终的应用服务交给用户。

Kubernetes的好处:

  • 隐藏资源管理和错误处理,用户仅需要关注应用的开发。
  • 服务高可用、高可靠。
  • 可将负载运行在由成千上万的机器联合而成的集群中。

Kubernetes架构设计

Kubernetes主要由以下几个核心组件组成:

  •  etcd:保存了整个集群的状态
  •  apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现 等机制
  •  controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
  •  scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
  •  kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
  •  Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
  •  kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡

除了核心组件,还有一些推荐的Add-ons:

  •  kube-dns:负责为整个集群提供DNS服务
  •  Ingress Controller:为服务提供外网入口
  •  Heapster:提供资源监控 • Dashboard:提供GUI
  •  Federation:提供跨可用区的集群
  •  Fluentd-elasticsearch:提供集群日志采集、存储与查询

• 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件 式应用执行环境

• 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服 务发现、DNS解析等)

• 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动 态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

• 接口层:kubectl命令行工具、客户端SDK以及集群联邦

• 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

  • Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS 应用、ChatOps等
  • Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的 配置和管理等

Kubernetes集群部署

配置官方文档:https://kubernetes.io/docs/setup/production-environment/container-runtimes/

首先先部署好一台harbor主机,这里我们使用已经部署好的harbor主机;下来使用三台主机做集群;

每台主机先安装docker-ce服务,并启动;然后再每台主机执行

cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

然后重新加载,并重启docker

# systemctl daemon-reload 
# systemctl restart docker
# swapoff -a  禁用swap分区

注释掉swap分区中的定义

安装k8s

为了快速部署使用阿里云地址去安装部署

https://developer.aliyun.com/mirror/kubernetesspm=a2c6h.13651102.0.0.3e221b118CxWWY

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

安装:(为实验方便要关闭selinux和防火墙)

# yum install -y kubelet kubeadm kubectl
# systemctl enable --now kubelet  开机自启
# kubeadm config print init-defaults 查看默认配置信息(默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库)
# kubeadm config images list   查看需要哪些镜像

# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers 查看需要哪些镜像
#  kubeadm config images pull --kubernetes-version=v1.18.3 --image-repository registry.aliyuncs.com/google_containers  (由于我安装的是v1.18.5,阿里云没跟新,所以这里选定下以前的版本v1.183)

需要加参数,获取其他版本

这里我们将镜像获取下来, 上传到harbor主机。这样方便我们另外两台主机获取(这里我们使用脚本批量修改,上传)

# docker images   查看镜像
# docker images | grep registry.aliyuncs.com/google_containers | awk '{print "docker tag ",$1":"$2,$1":"$2}'| sed -e 's#registry.aliyuncs.com/google_containers#reg.westos.org/library#2' | sh -x   批量更改标签
# docker images | grep registry.aliyuncs.com/google_containers | awk '{print "docker rmi ",$1":"$2}' | sh -x   批量删除镜像
# docker images   查看镜像

 没有操作前

执行脚本后

批量上传(注意上传时需要将ca.crt证书复制过来,并使用用户登录)

# docker images | grep reg.westos.org | awk '{print "docker push ",$1":"$2}' | sh -x  上传至harbor仓库

上传完成在harbor仓库查看

然后进行初始化,这里初始化镜像使用自己私有仓库的;--kubernetes-version可以选定版本

# kubeadm init --kubernetes-version=v1.18.3 --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/library  初始化集群

初始化完成后

创建kubeadm用户然后去提升权限

# useradd kubeadm
# visudo
# echo "source <(kubectl completion bash)" >> ~/.bashrc  配置k8s补齐功能

做完权限提升后切换到kubeadm用户

[kubeadm@server5 ~]$ mkdir -p $HOME/.kube
[kubeadm@server5 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server5 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[kubeadm@server5 ~]$ kubectl get node 查看

将其他两台主机加入集群

# kubeadm token list  列出token(这里token是有有效期的,一般是24h)
# kubeadm join 192.168.1.35:6443 --token 6qsdv3.potvaaq82jy0n5xd --discovery-token-ca-cert-hash sha256:779a8abdb2580775f69fc3b5354e6ee65a82602d0ff2f92dfbcf8411ae9929b2  将两节点加入

下来安装flannel网络组件:由于访问得是外网,所以我们可以添加下解析

[kubeadm@server5 ~]$ sudo vim /etc/hosts

在每台节点上都执行此命令

[kubeadm@server5 ~]$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml  

然后Master查看状态:

# kubectl get cs
#  kubectl get node
# kubectl get pod -n kube-system

添加节点:

master初始化成功后注意将kubeadm join xxx保存下来,等下node节点需要使用。如果忘记了,可以在master上通过kubeadm token list得到。

默认token 24小时就会过期,后续的机器要加入集群需要使用以下命令重新生成token

# kubeadm token create 

获取ca证书sha256编码hash值

# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

加一个曾经添加过的节点,先执行:

kubeadm reset  清空配置

再进行添加

kubeadm join 192.168.137.76:6443 --token <r6rahn.pgozs6koirmuni2q>    --discovery-token-ca-cert-hash sha256:<ba91634e22716ddb85afeab415435db96428c8daa19cb870a69a542f7b31a013>

删除节点:

(1)卸载节点(drain 翻译排出,此时卸载节点,但是没有删除)

kubectl drain <node name> --delete-local-data --force --ignore-daemonsets

(2)删除节点

kubectl delete node <node name>

(3)清空init配置,需要删除的节点上执行

kubeadm reset

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值