搭建和学习k8s容器平台

网友投稿 289 2022-09-12

搭建和学习k8s容器平台

前言

学习一项新技术,我们都要经历几个步骤:了解技术的产生背景-》技术的基础知识框架-》项目环境操练-》结合理论知识-》归纳总结,最后形成自己的一个技术经验。

对于学习技术的个人来说,搭建自己的一套学习环境会是一个坎。这里想分享自己一个环境搭建过程的经验以及过程中自己遇到一些觉得值得分享的问题处理过程。

​内容包括:​

k8s的基础知识;使用kubeadm工具搭建k8s平台。

​学习要求:​

linux系统基础(文件编辑,软件管理)容器基础知识(了解docker容器管理)

一、k8s的基础知识(简单了解即可)

组件介绍:​​官方链接​​

​交付正常运行的 Kubernetes 集群所需的各种组件包括:​

一些组件

控制平面组件(Control Plane Components)

​控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件(例如,当不满足部署的 ​​replicas​​​ 字段时,启动新的 ​​pod​​​)。​

​ ​​kube-apiserver​​

​API 服务器是 Kubernetes ​​控制面​​​的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。​

​etcd​

​etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。​

kube-scheduler

​控制平面组件,负责监视新创建的、未指定运行​​节点(node)​​​的 ​​Pods​​​,选择节点让 Pod 在上面运行。​

kube-controller-manager

运行​​​控制器​​​进程的控制平面组件。从逻辑上讲,每个​​控制器​​都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

cloud-controller-manager

​云控制器管理器是指嵌入特定云的控制逻辑的 ​​控制平面​​​组件。 云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。​

Node 组件

​节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。​

kubelet

​​kube-proxy​​​ 是集群中每个节点上运行的网络代理, 实现 Kubernetes ​​服务(Service)​​​ 概念的一部分。​

​kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。​

如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。

Container Runtime

容器运行环境是负责运行容器的软件。

Kubernetes 支持多个容器运行环境: ​​Docker​​​、 ​​containerd​​​、​​CRI-O​​​ 以及任何实现 ​​Kubernetes CRI (容器运行环境接口)​​。

其他组件:插件(Addons)、DNS、Web 界面(仪表盘)、容器资源监控、集群层面日志。

二、k8s环境搭建

2.1 搭建准备

VMware station 12 pro

实验需要创建​虚机3台​:参数3G内存、2核处理器、50G存储空间。

master节点: source01

node节点: source02、source03

要能​访问外网​环境,可以通过​克隆方式创建​多台,但得注意修改​网卡的uuid信息不能一致​(修改/etc/sysconfig/network-scripts/ifcfg-ens33中配置并重启网络服务)或者删除网卡中的UUID并重启网络服务。

2.2 初始化系统环境(三台虚机都要):

关闭防火墙和selinux # systemctl stop firewalld ; systemctl disable firewalld # setenforce 0 # sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 关闭swap分区 # swapoff -a 注释掉swap挂载信息 # vim /etc/fstab修改前: /dev/mapper/centos-swap swap swap defaults 0 0修改后: #/dev/mapper/centos-swap swap swap defaults 0 0修改内核参数。 br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。 # modprobe br_netfilter echo "modprobe br_netfilter" >> /etc/profile # cat > /etc/sysctl.d/k8s.conf <

kubelet   :运行在集群所有节点上,用于启动Pod和容器等对象的工具

kubeadm :用于初始化集群,启动集群的命令工具

kubectl    :用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

2.3 master节点上使用kubeadm初始化k8s集群

# kubeadm init --kubernetes-version=1.20.4 \--apiserver-advertise-address=192.168.1.63 \--image-repository registry.aliyuncs.com/google_containers \--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16注:--image-repository registry.aliyuncs.com/google_containers为保证拉取镜像不到国外站点拉取,手动指定仓库地址为registry.aliyuncs.com/google_containers。kubeadm默认从k8ss.grc.io拉取镜像。 我本地有导入到的离线镜像,所以会优先使用本地的镜像。

初始化之后,按照提示需要执行:

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

记录node节点后面加入的命令

kubeadm join 192.168.1.63:6443 --token rgz2ww.cmx4k1otzsizgzf2 \ --discovery-token-ca-cert-hash sha256:d8870af95b20d2c3aef441994603f3e1d71a5edde1b038df1e0f0c8754a43ecb

总的来说,安装k8s过程包括:

​​安装docker   yum install docker-ce​​​​安装kubeadm   yum  install kubeadm​​​​使用kubeadm初始化k8s集群 kubeadm init ​​

2.4 安装kubernetes网络组件-Calico

# kubectl apply -f /root/calico.yaml注:在线下载配置文件地址是: kubectl get nodesNAME STATUS ROLES AGE VERSIONxuegod63.cn Ready control-plane,master 26m v1.20.4

2.5 安装-2.0

​操作虚机:master​

​kubernetes-dashboard2.0yaml文件地址: ​

​​vim recommended.yaml

在第42行下方添加2行

nodePort: 30000

type: NodePort

增加完后,如下:

默认的dashboard是没有配置NodePort的映射的。

​添加dashboard管理员用户凭证,在原文件中追加以下内容:​

# cat >> recommended.yaml << EOF --- # ------------------- dashboard-admin ------------------- # apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin EOF安装dashboard # kubectl apply -f recommended.yaml # kubectl get pods --all-namespaces 查看登录令牌# kubectl describe secrets -n kubernetes-dashboard dashboard-admin...token: eyJhbGciOiJSUzI1NiIsImtpZCI6Il9VZzZoWU5ZNFRBb2tBak50NzVFX3EzYjl6dnpSZnN1NlB2ckJHSXIxYTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWvc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi10dmRnMiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyjM2YjRiZmI3LTNiZWYtNDM0MS04ZmIzLTI2OTdlODgyZTM3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.A841TIi773u38wnzhWYx5sT-SAhjxLVd7JrqWOsnUGNEdwt9gbYsPesJQjoinNNd9VZgpOFidwLVUone4gp46W-D1schDXNLVQevuhS3Ud4gXhBsbrLpUkToKMmkg6beJK0qJKQFBerF5Kz-8IOQBvwlat-PsbFdZgcFZRN7octYnEqcMGtl6Exh1qqGah-90J9xVY3E7IAUN2w2r1hx0D

​token: 浏览器登录时使用以下token进行登录。​

token:     ​ e​yJhbGciOiJSUzI1NiIsImtpZCI6Il9VZzZoWU5ZNFRBb2tBak50NzVFX3EzYjl6dnpSZnN1NlB2ckJHSXIxYTQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWvc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi10dmRnMiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyjM2YjRiZmI3LTNiZWYtNDM0MS04ZmIzLTI2OTdlODgyZTM3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.A841TIi773u38wnzhWYx5sT-SAhjxLVd7JrqWOsnUGNEdwt9gbYsPesJQjoinNNd9VZgpOFidwLVUone4gp46W-D1schDXNLVQevuhS3Ud4gXhBsbrLpUkToKMmkg6beJK0qJKQFBerF5Kz-8IOQBvwlat-PsbFdZgcFZRN7octYnEqcMGtl6Exh1qqGah-90J9xVY3E7IAUN2w2r1hx0D​

2.6 将node节点加入到master节点中

master上查看添加信息

​kubeadm token create --print-join-command

# kubeadm token create --print-join-commandkubeadm join 192.168.137.128:6443 --token zn2sal.2xs5k1cbz7xeut3t --discovery-token-ca-cert-hash sha256:402989175a22b7779a776def8aa38a133c87deae15f0fec4210aba8d9e2a3036

node节点上执行以上查找出来的添加命令

# kubeadm join 192.168.137.128:6443 --token zn2sal.2xs5k1cbz7xeut3t --discovery-token-ca-cert-hash sha256:402989175a22b7779a776def8aa38a133c87deae15f0fec4210aba8d9e2a3036

检查添加状态

[root@source01 ~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONsource01 Ready control-plane,master 4d5h v1.20.4source02 Ready 4d3h v1.20.4source03 Ready 4d3h v1.20.4

如何在普通的node节点上查看集群状态?

将master证书导入到node上,这样在node才可以使用kubectl命令管理k8s [root@source02 ~]]# mkdir ~/.kube拷贝xuegod63的配置文件到xuegod64[root@source01 ~]# scp ~/.kube/config source02:/root/.kube/[root@source02 ~]# kubectl get nodes

三、Kubernetes 仪表板(Dashboard)

至此,我们完成了k8s的简单部署,可以开始尝试创建属于自己的项目。

关于​​Kubernetes 仪表板(Dashboard)​​的使用,也可以参考官方文档:

​​https://kubernetes.io/zh/docs/tasks/access-application-cluster/web-ui-dashboard/​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:人脸识别黑产:真人认证视频百元一套!
下一篇:#yyds干货盘点#spring-cloud-kubernetes与k8s的configmap
相关文章

 发表评论

暂时没有评论,来抢沙发吧~