Kubernetes(k8s)---(1)集群部署

目录

一、Kubernets简介

1.1 Kubernetes优点

1.2 Kubernetes架构设计

1.3 kubernete服务架构

二、Kubernetes部署

2.1 基本环境配置

 2.2 禁用swap分区

2.3 配置kubernetes的yum源,并安装组件

 2.4 设置kubernetes命令补全功能

2.5 初始化集群

2.6 master端配置kubectl

2.7 安装网络组件

2.8 节点的删除与恢复

三 、Kubectl命令


一、Kubernets简介

        Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

        Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合, 将最终的应用服务交给用户。

1.1 Kubernetes优点

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

1.2 Kubernetes架构设计

        Kubernetes集群包含代理节点kubelet和master组件(API、scheduler、etc),但都是基于分布式存储系统。

图 1kubernetes的架构

 

        核心组件:etcd、apiserver、controller manager、scheduler、kubelet、container runtime、kube-proxy。

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


其他推荐添加的add-ones:

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

1.3 kubernete服务架构

        与Linux相同,采用分层式的微架构服务

图 2 kubernetes的层次结构

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

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

 更多资料可查看:Kubernetes 是什么? | Kubernetes


二、Kubernetes部署

        官方部署文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

2.1 基本环境配置:

        • 基于redhat7.6的3台基础服务--server1(master) server2 server3

        • 所有主机均关闭节点的selinux和iptables防火墙

        • 所有节点部署docker引擎、设置k8s的网络配置、重启服务

##yum仓库提前配置好,配置文件可以根据docker在编写时进行配置,或者参考aliyu.com即可配置完成

##安装docker 
[root@server1 ~]# yum install -y docker-ce docker-cli

##编写k8s的配置文件
[root@server1 ~]# vim /etc/sysctl.d/k8s.conf

####内容#####
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 

##服务重载
[root@server1 ~]# sysctl --system

##重新配置docker引擎
[root@server1 ~]# 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"  
  ] 
}

##设置docker服务开启自启
[root@server1 ~]# systemctl enable docker --now
图3 设置网关

 

图 4 设置docker驱动

 2.2 禁用swap分区

##所有节点禁用swap分区
[root@server1 ~]# swapoff -a

##禁用/etc/fstab文件中的swap定义 
[root@server1 ~]# vim /etc/fstab 
[root@server1 ~]# tail -1 /etc/fstab 
#UUID=2a714265-f92d-4429-87da-9f09e32e6ff2 swap                    swap    defaults        0 0
图 5 设置swap禁用

 

2.3 配置kubernetes的yum源,并安装组件

###kubernetes的yum源:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-control-plane-node

##编写配置文件
[root@server1 ~]# vim /etc/yum.repos.d/kubernetes.repo

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

###安装kubelet kubeadm kubectl
[root@server1 ~]# yum install -y kubelet kubeadm kubectl

##设置开机自启
[root@server1 ~]# systemctl enable --now kubelet

##查看默认配置基础信息
[root@server1 ~]# kubeadm config print init-defaults

##列出所需镜像
[root@server1 ~]# kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

##拉去相应的镜像
[root@server1 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

##查看获取的镜像
[root@server1 ~]# docker images

##非控制节点只需要获取一下三个镜像即可 
google_containers/kube-proxy、google_containers/coredns、google_containers/pause 

##相应的image进行打包-->传送给server2和server3-->解压上传给docker image

[root@server1 ~]# docker save registry.aliyuncs.com/google_containers/kube-proxy registry.aliyuncs.com/google_containers/coredns registry.aliyuncs.com/google_containers/pause  > node.tar

[root@server2 ~]# docker load -i node.tar
[root@server2 ~]# docker load -i node.tar
图 6 开启kubelet.service

 

图 7 查看所需要的images

 

 

图 8 下载相应的iamges

 2.4 设置kubernetes命令补全功能

##kubernetes命令补全
[root@server1 ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@server1 ~]# source .bashrc
图 9 设置命令行补全

2.5 初始化集群

##在管理端初始化集群

[root@server1 ~]# 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安装版本
##重新设置
[root@server1 ~]# kubeadm reset

注意:token有时效24h,超过时需要生成新的token

生成新的token:
kubeadm token create

查看新的哈希码:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'

图 10 初始化服务
图 11 查看相应的添加集群的方式

2.6 master端配置kubectl

##添加kubeadm用户,并设置相应权限
[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers

####设置的kubeadm权限####
kubeadm    ALL =(ALL)    NOPASSWD:ALL

##创建配置文件-->编写配置文件-->设置文件权限
[root@server1 ~]# vim /etc/sudoers

[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ mkdir -p $HOME/.kube
[kubeadm@server1 ~]$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
cp: cannot open ‘/etc/kubernetes/admin.conf’ for reading: Permission denied
[kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

##root用户只需要执行
[kubeadm@server1 ~]$ vim ~/.bash_profile
[kubeadm@server1 ~]$ export KUBECONFIG=/etc/kubernetes/admin.conf

##查看集群节点
[kubeadm@server1 .kube]$ kubectl get node

图 12 创建普通用户

 

图 13 设置普通用户的权限

 

图 14 查看所拥有的节点

2.7 安装网络组件

###从网络下载配置文件
[root@server1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

            master要配置及部署文件kube-fannel.ym,所有节点都要配置仓库的地址解析,及flannel软件组

##查看组件状态  必须所有组件running
[root@server1 ~]# kubectl get pod --all-namespaces


##其他网络安装
https://kubernetes.io/zh/docs/concepts/cluster-administration/addons/
图 15 配置flannel网络组件

 

图 16 查看配置的网络节点

 

图 17 查看网络运行的基本信息

 

2.8 节点的删除与恢复

##在master端删除节点
[root@server1 ~]# kubectl drain server3 --delete-local-data --force --ignore-daemonsets
[root@server1 ~]# kubectl delete node server3

##非正常节点
[root@server1 ~]# kubeadm reset

三 、Kubectl命令

操作手册:https://kubernetes.io/docs/reference/generated/kubectl/kubectlcommands

kubectl get cs
kubectl get node
kubectl get pod -n kube-system
kubectl get pod -o wide -n kube-system
图 18 基础命令的应用

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值