K8S部署

Kubernetes简介

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应
用了很多年,Borg系统运行管理着成千上万的容器应用。
• Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了
Borg系统中的经验和教训。
• Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将
最终的应用服务交给用户。 • Kubernetes的好处:
• 隐藏资源管理和错误处理,用户仅需要关注应用的开发。 • 服务高可用、高可靠。
• 可将负载运行在由成千上万的机器联合而成的集群中。

kubernetes设计架构

Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一 切都基于分布式的存储系统。

在这里插入图片描述
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设计理念和功能其实就是一个类似Linux的分层架构
在这里插入图片描述

核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件 式应用执行环境
• 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服 务发现、DNS解析等)
• 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动 态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)
• 接口层:kubectl命令行工具、客户端SDK以及集群联邦
• 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范 畴
• Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS 应用、ChatOps等
• Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的 配置和管理等

Kubernetes部署

关闭节点的selinux和iptables防火墙

所有节点部署docker引擎

# yum install -y docker-ce docker-ce-cli

• # vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1
# sysctl --system# systemctl enable docker# systemctl start docker

官网:https://kubernetes.io/docs/setup/production-environment/container- runtimes/#docker
• # vim /etc/docker/daemon.json

{
"exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file",
"log-opts": {
"max-size": "100m"
 },
"storage-driver": "overlay2", "storage-opts": [
"overlay2.override_kernel_check=true"
 ]
 }
#mkdir -p /etc/systemd/system/docker.service.d
#systemctl daemon-reload
# systemctl restart docker

禁用swap分区:

#swapoff -a
注释掉/etc/fstab文件中的swap定义

安装部署软件kubeadm:(此部分内容在master节点做)

#vim /etc/yum.repos.d/k8s.repo

[kubernetes]
name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7- x86_64/
enabled=1
gpgcheck=0

 # yum install -y kubelet kubeadm kubectl# systemctl enable --now kubelet

#kubeadm config print init-defaults //查看默认配置信息
默认从k8s.gcr.io上下载组件镜像,需要翻墙才可以,所以需要修改镜像仓库:
#kubeadm config images list --image-repository registry.aliyuncs.com/google_containers //列出所需镜像

#`kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers //拉取镜像`
#kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers //初始化集群

初始化集群的解释:
–pod-network-cidr=10.244.0.0/16 //使用flannel网络组件时必须添加
–kubernetes-version //指定k8s安装版本

节点扩容:(此部分内容在被控制节点做)

#kubeadm join --token b3a32e.7cef20447b55261e 172.25.0.11:6443 --discovery-
token-ca-cert-hash sha256:bc718df41fdceb0db6c5380c7e27c204589b41dcb5f9a3bc52c254b707377f2f

注意:初始化集群时会生成哈希码,节点挂掉以后可以重新生成,重新做节点阔容即可
token值在重新做节点扩容的时候,需要重新生成。
生成命令:kubeadm token cerate
172.25.0.11:masker 节点的IP地址

配置kubectl(master节点做)

#useradd kubeadm
#vim /etc/sudoers

kubeadm ALL=(ALL) NOPASSWD:ALL

#mkdir -p $HOME/.kube

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

配置kubectl命令补齐功能

#echo "source <(kubectl completion bash)" >> ~/.bashrc

Master查看状态:

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

harbor私有仓库的搭建

之前需要装Docker仓库,并启动仓库,设置开机启动

为Docker仓库添加证书加密功能

• 生成证书(域名westos.org要求在主机上有解析)
• # mkdir -p certs
• # openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/westos.org.key -x509 -days 365 -out certs/westos.org.crt
在这里插入图片描述

拷贝证书到docker主机

• # mkdir -p /etc/docker/certs.d/westos.org/
• # cp westos.org.crt /etc/docker/certs.d/westos.org/ca.crt

测试上传镜像

#docker tag nginx:latest westos.org/nginx:latest • # docker push westos.org/nginx:latest

在这里插入图片描述

docker主机认证

##docker login westos.org

在这里插入图片描述

harbor仓库

部署:(依赖性 docker 17.06.0-ce+ and docker-compose 1.18.0+)
#tar zxf harbor-offline-installer-v1.10.1.tgz
#cd harbor
#vim harbor.yml hostname: reg.westos.org http:

port: 80 https:
port: 443
certificate: /data/certs/westos.org.crt private_key: /data/certs/westos.org.key
harbor_admin_password: westos database:
password: westos
#./install.sh --with-notary --with-clair --with-chartmuseum

部署根证书:

/etc/docker/certs.d/reg.westos.org/ca.crt • ~/.docker/tls/reg.westos.org:4443/ca.crt

启用docker内容信任:

export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443

上传镜像:

#docker push reg.westos.org/library/nginx:latest

Enter passphrase for root key with ID e42f679:
Enter passphrase for new repository key with ID 383f503:

删除签名:

#docker trust revoke reg.westos.org/library/nginx:latest

拷贝证书到每一个需要用到harbor仓库的docker主机下,这样就可以进行访问仓库。访问时间登陆仓库

###注意
生成证书的时候,名字必须一致,否则会导致证书的认证失败。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐