宁海县做企业网站,做网站的图片从哪里找,浦东新区专业做网站,做网站需要懂程序吗文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构
1.Kubernetes…
文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构
1.Kubernetes简介 在Docker 作为高级容器引擎快速发展的同时在Google内部容器技术已经应用了很多年Borg系统运行管理着成千上万的容器应用。 Kubernetes项目来源于Borg可以说是集结了Borg设计思想的精华并且吸收了Borg系统中的经验和教训。 Kubernetes对计算资源进行了更高层次的抽象通过将容器进行细致的组合将最终的应用服务交给用户。 Kubernetes的好处 隐藏资源管理和错误处理用户仅需要关注应用的开发。 服务高可用、高可靠。 可将负载运行在由成千上万的机器联合而成的集群中。 2.kubernetes设计架构
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc)一切都基于分布式的存储系统。 Kubernetes主要由以下几个核心组件组成 etcd保存了整个集群的状态数据存储引擎后期可替换为其他存储引擎仅对应需改变apiserver即可apiserver提供了资源操作的唯一入口并提供认证、授权、访问控制、API注册和发现等机制其他所有组件通过apiserver连接etcd进行写入数据等controller manager负责维护集群的状态比如故障检测、自动扩展、滚动更新等scheduler负责资源的调度按照预定的调度策略将Pod调度到相应的机器上kubelet负责维护容器的生命周期同时也负责VolumeCVI和网络CNI的管理Container runtime负责镜像管理以及Pod和容器的真正运行CRI目前阶段就是dockerkube-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集群部署
官方网址https://kubernetes.io/ 1-23版本https://v1-23.docs.kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
由上图本次实验我们选择安装1.23版本 主机名ip角色server1192.168.117.11reg.westos.orgharbor仓库server2192.168.117.12masterk8s集群控制节点server3192.168.117.13nodek8s集群工作节点server4192.168.117.14nodek8s集群工作节点
所有节点禁用selinux和防火墙 所有节点同步时间和/etc/hosts解析 所有节点安装docker-ce 所有节点禁用swap注意注释掉/etc/fstab文件中的定义
1.集群环境初始化
server1拉起仓库 [rootserver1 harbor]# docker-compose up -d
由于传文件较多也可以在server1做免密本实验未采用免密 所有k8s集群节点执行以下步骤 禁用swap [rootserver2 ~]# swapoff -a [rootserver2 ~]# vim /etc/fstab #/dev/mapper/rhel-swap swap swap defaults 0 0 修改内核参数 [rootk8s2 sysctl.d]# vim /etc/sysctl.d/docker.conf net.bridge.bridge-nf-call-iptables1 net.bridge.bridge-nf-call-ip6tables1 net.ipv4.ip_forward1 让内核参数生效 [rootk8s2 ~]# sysctl --system [rootk8s2 ~]# vim /etc/yum.repos.d/docker.repo [docker] namedocker-ce baseurlhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/gpgcheck0
[centos] nameextras baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos/7/extras/x86_64/ gpgcheck0 安装docker-ce
[rootk8s2 ~]# yum install -y docker-ce [rootk8s2 ~]# systemctl enable --now docker 配置默认仓库为reg.westos.org [rootk8s2 ~]# vim /etc/docker/daemon.json { “registry-mirrors”: [“https://reg.westos.org”], “exec-opts”: [“native.cgroupdriversystemd”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “100m” }, “storage-driver”: “overlay2” }
[rootk8s2 ~]# systemctl restart docker
所有节点同步docker配置以及拷贝harbor仓库的证书 证书为之前实验是在server1生成 [rootk8s1 ~]# cd /etc/docker/ [rootk8s1 docker]# ls certs.d [rootk8s1 docker]# scp -r certs.d/ k8s2:/etc/docker/ [rootk8s1 docker]# scp -r certs.d/ k8s3:/etc/docker/ [rootk8s1 docker]# scp -r certs.d/ k8s4:/etc/docker/
所有节点添加仓库的地址解析 确保所有k8s节点可以从私有仓库下载镜像 注可以在仓库页面查看日志确保所有节点可以拉取 [rootk8s1-4 docker]# docker pull nginx
2.所有节点安装kubeadm [rootk8s2 yum.repos.d]# vim /etc/yum.repos.d/k8s.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck0 [rootk8s2 ~]# yum install -y kubelet-1.23.17-0 kubeadm-1.23.17-0 kubectl-1.23.17-0
[rootk8s2 ~]# systemctl enable --now kubelet kubelet是一个循环程序会主动探测集群的状态一直会尝试重启 若安装安装很多软件建议建立本地yum源 注下图为列出软件版本
3.拉取集群所需镜像 [rootk8s2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers 注:指定镜像的位置是阿里云registry.aliyuncs.com 登录仓库 [rootk8s2 ~]# docker login reg.westos.org Username: admin Password: 先在harbor仓库上新建一个项目: 上传镜像: 1.给拉取的镜像加标签用变量的方式进行替换 [rootk8s2 ~]# docker images | grep google_containers | awk ‘{print $1:$2}’ | awk -F/ ‘{system(“docker tag “$0” reg.westos.org/k8s/”$3)}’ 2.上传 [rootk8s2 ~]# docker images |grep k8s | awk ‘{system(“docker push “$1”:”$2)}’
3.集群初始化
[rootk8s2 ~]# kubeadm init --pod-network-cidr10.244.0.0/16 --image-repository reg.westos.org/k8s --kubernetes-version v1.23.17 注–pod-network-cidr10.244.0.0/16是一个比较常用的网络段 根据上图进行下一步设置环境变量root执行export KUBECONFIG/etc/kubernetes/admin.conf即可 普通用户执行按照上图的另一条要求执行 设置环境变量 [rootk8s2 ~]# export KUBECONFIG/etc/kubernetes/admin.conf 注/etc/kubernetes/admin.conf为证书用来连接APIserver的证书 注意没有设置变量会有以下报错 写入环境变量文件确保重启后依然生效 [rootk8s2 ~]# vim .bash_profile export KUBECONFIG/etc/kubernetes/admin.conf 查看集群状态 [rootk8s2 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s2 NotReady control-plane,master 74s v1.23.17 当前节点还没有就绪是因为没有安装网路插件pod还没运行
[rootk8s2 ~]# kubectl get pod -A ##和docker ps -a 作用一致
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7b56f6bc55-b495q 0/1 Pending 0 79s
kube-system coredns-7b56f6bc55-ch2ts 0/1 Pending 0 79s
kube-system etcd-k8s2 1/1 Running 0 92s
kube-system kube-apiserver-k8s2 1/1 Running 0 92s
kube-system kube-controller-manager-k8s2 1/1 Running 0 92s
kube-system kube-proxy-7ckfn 1/1 Running 0 79s
kube-system kube-scheduler-k8s2 1/1 Running 0 92s4.安装flannel网络插件
所有节点都要去下载所以修改到下载地址为我们建立的私有仓库即可 下载flannel网络插件 [rootserver2 ~]# yum install -y wget [rootserver2 ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml 修改镜像位置:从官方仓库改为默认找私有仓库 [rootk8s2 ~]# vim kube-flannel.yml 新建项目仓库 下载镜像 [rootk8s1 docker]# docker pull docker.io/flannel/flannel:v0.21.2 [rootk8s1 docker]# docker pull docker.io/flannel/flannel-cni-plugin:v1.1.2 上传镜像($0表示取出来的部分) [rootk8s1 docker]# docker images |grep flannel | awk ‘{print $1:$2}’ | awk ‘{system(“docker tag “$0” reg.westos.org/”$0)}’
[rootk8s1 docker]# docker push reg.westos.org/flannel/flannel:v0.21.2 [rootk8s1 docker]# docker push reg.westos.org/flannel/flannel-cni-plugin:v1.1.2 确保镜像上传成功 部署网络插件 [rootk8s2 ~]# kubectl apply -f kube-flannel.yml
namespace/kube-flannel created serviceaccount/flannel created clusterrole.rbac.authorization.k8s.io/flannel created clusterrolebinding.rbac.authorization.k8s.io/flannel created configmap/kube-flannel-cfg created daemonset.apps/kube-flannel-ds created
[rootk8s2 ~]# kubectl -n kube-flannel get pod
NAME READY STATUS RESTARTS AGE
kube-flannel-ds-6gnh4 1/1 Running 0 11s[rootk8s2 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s2 Ready control-plane,master 14m v1.23.17[rootk8s2 ~]# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-6gnh4 1/1 Running 0 20s
kube-system coredns-7b56f6bc55-b495q 1/1 Running 0 14m
kube-system coredns-7b56f6bc55-ch2ts 1/1 Running 0 14m
kube-system etcd-k8s2 1/1 Running 0 14m
kube-system kube-apiserver-k8s2 1/1 Running 0 14m
kube-system kube-controller-manager-k8s2 1/1 Running 0 14m
kube-system kube-proxy-7ckfn 1/1 Running 0 14m
kube-system kube-scheduler-k8s2 1/1 Running 0 14m以上所有的信息已经写到了etcd中当有节点加进来的时候会从etcd中那集群状态
5.扩容节点
以下两条命令–token有效期为24小时为3.集群初始化时在server2生成复制在server3、server4直接使用即可
[rootk8s3 ~]# kubeadm join 192.168.56.12:6443 --token u9a137.tll3mwnlqgc74gll \--discovery-token-ca-cert-hash sha256:01198c9ecacf6d15068debb4cd4fddf8ac0fa1dba65c3b049c5dc1761c355e02[rootk8s4 ~]# kubeadm join 192.168.56.12:6443 --token u9a137.tll3mwnlqgc74gll \--discovery-token-ca-cert-hash sha256:01198c9ecacf6d15068debb4cd4fddf8ac0fa1dba65c3b049c5dc1761c355e02[rootk8s2 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s2 Ready control-plane,master 16m v1.23.17
k8s3 Ready none 52s v1.23.17
k8s4 Ready none 46s v1.23.176.设置kubectl命令补齐
[rootk8s2 ~]# yum install -y bash-completion [rootk8s2 ~]# echo “source (kubectl completion bash)” ~/.bashrc [rootk8s2 ~]# source ~/.bashrc kubectl命令指南 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands