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

简介: 【云原生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搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
21天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
105 19
|
19天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
78 12
|
1月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
335 10
|
1月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
运维 Cloud Native 持续交付
云原生技术深度探索:重塑现代IT架构的无形之力####
本文深入剖析了云原生技术的核心概念、关键技术组件及其对现代IT架构变革的深远影响。通过实例解析,揭示云原生如何促进企业实现敏捷开发、弹性伸缩与成本优化,为数字化转型提供强有力的技术支撑。不同于传统综述,本摘要直接聚焦于云原生技术的价值本质,旨在为读者构建一个宏观且具体的技术蓝图。 ####
|
1月前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
44 3
|
1月前
|
Cloud Native API 持续交付
云原生时代的微服务架构设计
随着云计算的蓬勃发展,云原生概念逐渐成为IT行业的热点。本文将通过深入浅出的方式,介绍在云原生环境下,如何设计一个高效、可扩展的微服务架构。文章不仅涉及理论概念,还将结合实际代码示例,帮助读者理解微服务架构的核心要素和设计原则,以及如何在云平台上实现这些设计。
|
26天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
46 0

热门文章

最新文章