【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)(二)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【云原生Kubernetes系列第五篇】kubeadm v1.20 部署K8S 集群架构(人生这道选择题,总会有遗憾)(二)

五、部署K8S集群


#查看初始化需要的镜像
kubeadm config images list
#在 master 节点上传所需要的镜像这里我使用一下载的镜像文件 v1.20.11.zip 压缩包至 /opt 目录
cd /opt
unzip v1.20.11.zip
#批量加载镜像文件
cd v1.20.11/
for i in $(ls *.tar); do docker load -i $i; done  
#node节点操作
cd /opt
unzip v1.20.11.zip
for i in $(ls *.tar); do docker load -i $i; done



5.1 初始化kubeadm

方法一:
#生成kubeadm-config.yaml配置文件
kubeadm config print init-defaults > /opt/kubeadm-config.yaml
cd /opt
vim kubeadm-config.yaml
#--12行--通告地址
advertiseAddress: 192.168.109.131
#--34行--修改k8s版本号默认为1.20.0
kubernetesVersion: v1.20.11
#--37行--指定service的子网段
serviceSubnet: 10.96.0.0/16
#--38--添加pod的cni网络插件的网段这里我用的flannel模式如果用的calico模式网段则是192.168.0.0/16
podSubnet: 10.244.0.0/16
#--40--行添加kube-proxy的流量调度模式默认为iptables这里用ipvs
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
#--experimental-upload-certs 参数可以在后续执行加入节点时自动分发证书文件,k8sV1.16版本开始替换为 --upload-certs 、tee kubeadm-init.log 用以输出日志
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
#master节点查看集群状态
kubectl get node









#查看 kubeadm-init 日志此时还没有日志所以查看不到
less kubeadm-init.log
#kubernetes配置文件目录
ls /etc/kubernetes/
#存放ca等证书和密码的目录
ls /etc/kubernetes/pki

方法二:
kubeadm init \
--apiserver-advertise-address=192.168.239.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.20.11 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0
-----------------------------------------------------------------------------------------
初始化集群需使用kubeadm init命令,可以指定具体参数初始化,也可以指定配置文件初始化。
可选参数:
--apiserver-advertise-address:apiserver通告给其他组件的IP地址,一般应该为Master节点的用于集群内部通信的IP地址,0.0.0.0表示节点上所有可用地址
--apiserver-bind-port:apiserver的监听端口,默认是6443
--cert-dir:通讯的ssl证书文件,默认/etc/kubernetes/pki
--control-plane-endpoint:控制台平面的共享终端,可以是负载均衡的ip地址或者dns域名,高可用集群时需要添加
--image-repository:拉取镜像的镜像仓库,默认是k8s.gcr.io
--kubernetes-version:指定kubernetes版本
--pod-network-cidr:pod资源的网段,需与pod网络插件的值设置一致。通常,Flannel网络插件的默认为10.244.0.0/16,Calico插件的默认值为192.168.0.0/16;
--service-cidr:service资源的网段
--service-dns-domain:service全域名的后缀,默认是cluster.local
--token-ttl: 默认token的有效期为24小时,如果不想过期,可以加上--token-ttl=0 这个参数
-----------------------------------------------------------------------------------------
#方法二初始化后需要修改 kube-proxy 的 configmap,开启 ipvs
kubectl edit cm kube-proxy -n=kube-system
#修改mode: ipvs
#设定kubectl
#kubectl需经由API server认证及授权后方能执行相应的管理操作,kubeadm 部署的集群为其生成了一个具有管理员权限的认证配置文件 /etc/kubernetes/admin.conf,它可由 kubectl 通过默认的 “$HOME/.kube/config” 的路径进行加载。
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#如果 kubectl get cs 发现集群不健康,更改以下两个文件,搜索 --port=0,把这一行注释掉
vim /etc/kubernetes/manifests/kube-scheduler.yaml 
- --port=0      # 搜索port=0,把这一行注释掉
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
- --port=0      # 搜索port=0,把这一行注释掉
systemctl restart kubelet


5.2 所有节点部署网络插件flannel

方法一:
#master 节点上传 kube-flannel.yml及flannel.tar 文件到opt目录
cd /opt
#将镜像文件加载到本地
docker load -i flannel.tar 
#将镜像文件传输到其他node节点
scp flannel.tar node01:/opt
scp flannel.tar node02:/opt
#所有node节点执行将镜像文件加载到本地
docker load -i flannel.tar
#在 master 节点创建 flannel 资源
kubectl apply -f kube-flannel.yml 
方法二:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
//在 node 节点上执行 kubeadm join 命令加入群集
kubeadm join 192.168.80.10:6443 --token rc0kfs.a1sfe3gl4dvopck5 \
    --discovery-token-ca-cert-hash sha256:864fe553c812df2af262b406b707db68b0fd450dc08b34efb73dd5a4771d37a2




#在master节点查看节点状态
kubectl get nodes
#查看所有命名空间
kubectl get pods -A


#测试 pod 资源创建
kubectl create deployment nginx --image=nginx
kubectl get pods -o wide
NAME                     READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-hj9wv   1/1     Running   0          3m49s   10.244.1.2   node01   <none>           <none>


#暴露端口提供服务
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc  #查看资源暴露端口
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        154m
nginx        NodePort    10.96.58.254   <none>        80:32084/TCP   14s


5.3 测试访问

curl http://node01:32084


web访问http://192.168.109.132:32084



#扩展3个副本
kubectl scale deployment nginx --replicas=3
kubectl get pods -o wide


5.4 部署 Dashboard

#master节点操作
#上传dashboard.tar和metrics-scraper.tar镜像文件这两个镜像文件不上传也没事会自动下载
#dashboard.tar #供仪表板使用
#metrics-scraper.tar #收集k8s资源的状态
#加载镜像文件
docker load -i dashboard.tar
docker load -i metrics-scraper.tar
#将镜像文件传输到其他node节点
scp dashboard.tar metrics-scraper.tar node01:/opt
scp dashboard.tar metrics-scraper.tar node02:/opt


#所有node节点执行
docker load -i dashboard.tar
docker load -i metrics-scraper.tar



#master节点上传 recommended.yaml 文件到 /opt/s 目录中,部署 CoreDNS 
cd /opt/
vim recommended.yaml
#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
   - port: 443
     targetPort: 8443
     nodePort: 30001     #添加
     type: NodePort          #添加
     selector:
         k8s-app: kubernetes-dashboard
kubectl apply -f recommended.yaml     #配置资源
kubectl get pods -n kubernetes-dashboard      #指定命名空间查看
#使用输出的token登录Dashboard
https:/192.168.109.133:30001


#创建service account并绑定默认cluster-admin管理员集群角色
kubectl create serviceaccount dashboard-admin -n kube-system  #给命名空间创建用户
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin    #绑定将用户集群角色为管理员
kubectl get secret -n kube-system |grep dashboard #查看命名空间
kubectl describe secret dashboard-admin-token-bfmq5 -n kube-system #查看详细信息



如果出现 configmaps is forbidden: User “system:anonymous” cannot list resource “configmaps” in API group “” in the namespace “default”


执行一下命令

kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
存储 Kubernetes 调度
|
6天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
29 4
|
4天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
29 1
|
7天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
29 3
|
8天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
29 3
|
12天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
48 6
|
6天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
13天前
|
Kubernetes Cloud Native 持续交付
云端新纪元:云原生技术重塑IT架构####
【10月更文挑战第20天】 本文深入探讨了云原生技术的兴起背景、核心理念、关键技术组件以及它如何引领现代IT架构迈向更高效、灵活与可扩展的新阶段。通过剖析Kubernetes、微服务、Docker等核心技术,本文揭示了云原生架构如何优化资源利用、加速应用开发与部署流程,并促进企业数字化转型的深度实践。 ####
|
12天前
|
监控 Cloud Native Java
云原生架构下微服务治理策略与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境下微服务架构的治理策略,通过分析当前技术趋势与挑战,提出了一系列高效、可扩展的微服务治理最佳实践方案。不同于传统摘要概述内容要点,本部分直接聚焦于治理核心——如何在动态多变的分布式系统中实现服务的自动发现、配置管理、流量控制及故障恢复,旨在为开发者提供一套系统性的方法论,助力企业在云端构建更加健壮、灵活的应用程序。 ####
58 10
|
7天前
|
Kubernetes Cloud Native API
云原生架构下微服务治理的深度探索与实践####
本文旨在深入剖析云原生环境下微服务治理的核心要素与最佳实践,通过实际案例分析,揭示高效、稳定的微服务架构设计原则及实施策略。在快速迭代的云计算领域,微服务架构以其高度解耦、灵活扩展的特性成为众多企业的首选。然而,伴随而来的服务间通信、故障隔离、配置管理等挑战亦不容忽视。本研究聚焦于云原生技术栈如何赋能微服务治理,涵盖容器编排(如Kubernetes)、服务网格(如Istio/Envoy)、API网关、分布式追踪系统等关键技术组件的应用与优化,为读者提供一套系统性的解决方案框架,助力企业在云端构建更加健壮、可维护的服务生态。 ####