历览千载书,时时见遗烈。这篇文章主要讲述搭建和学习k8s容器平台相关的知识,希望能为你提供帮助。
前言学习一项新技术,我们都要经历几个步骤:了解技术的产生背景-》技术的基础知识框架-》项目环境操练-》结合理论知识-》归纳总结,最后形成自己的一个技术经验。
对于学习技术的个人来说,搭建自己的一套学习环境会是一个坎。这里想分享自己一个环境搭建过程的经验以及过程中自己遇到一些觉得值得分享的问题处理过程。
?内容包括:?
- k8s的基础知识;
- 使用kubeadm工具搭建k8s平台。
- linux系统基础(文件编辑,软件管理)
- 容器基础知识(了解docker容器管理)
一、k8s的基础知识(简单了解即可)组件介绍:??官方链接??
?交付正常运行的 Kubernetes 集群所需的各种组件包括:?
一些组件
- 控制平面组件(Control Plane Components)
?replicas?
??
字段时,启动新的
??pod???)。?- ? ??kube-apiserver??
- ?etcd?
- kube-scheduler
- kube-controller-manager
- cloud-controller-manager
- Node 组件
- kubelet
?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
master节点:source01
【搭建和学习k8s容器平台】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 swapswapdefaults0 0
修改后:#/dev/mapper/centos-swap swapswapdefaults0 0
修改内核参数。 br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。
# modprobe br_netfilter
echo "modprobe br_netfilter" > > /etc/profile
# cat > /etc/sysctl.d/k8s.conf < < EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# sysctl -p /etc/sysctl.d/k8s.conf
安装kubeadm、docker-ce可以在线也可以离线,
离线方式:
配置kubeadm、docker-ce的离线yum源,前提是本地已经下载好离线包,压缩在k8s-docker.tar.gz里
# tar xf k8s-docker.tar.gz -C /opt/
# tee /etc/yum.repos.d/k8s-docker.repo < < EOF
[k8s-docker]
name=k8s-docker
baseurl=file:///opt/k8s-docker
enabled=1
gpgcheck=0
EOF
在线方式:
配置阿里云Kubernetes yum源
[root@xuegod63 ~]# tee /etc/yum.repos.d/kubernetes.repo < < EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
安装kubeadm组件,用于后期安装k8s使用,现在还没有安装k8s
#yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
在线源安装一定要指定版本,否则安装最新版,软件版本要和将要安装的k8s集群版本一致。
# yum install -y kubelet-1.20.4 kubeadm-1.20.4 kubectl-1.20.4
说明:
kubelet:运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm :用于初始化集群,启动集群的命令工具
kubectl:用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
安装docker-ce服务。
# yum install -y yum-utils device-mapper-persistent-data lvm2
安装docker-ce
# yum install docker-ce docker-ce-cli containerd.io -y
# systemctl start docker & & systemctl enable docker
添加阿里云镜像加速地址并修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认则为systemd
# tee /etc/docker/daemon.json < < EOF
"registry-mirrors": ["https://rncxm540.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
EOF
# systemctl daemon-reload
# systemctl restart docker
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
注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml
检查集群情况(Ready则正常)
# kubectl get nodes
NAMESTATUSROLESAGEVERSION
xuegod63.cnReadycontrol-plane,master26mv1.20.4
2.5 安装-2.0
?操作虚机:master?
?kubernetes-dashboard2.0yaml文件地址: ?
??https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml??
很多时候官方的资源我们不能够直接访问,可以通过浏览器访问并使用ctrl+s进行保存,然后上传使用。
修改yaml文件
# 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-command
kubeadm 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 nodes
NAMESTATUSROLESAGEVERSION
source01Readycontrol-plane,master4d5hv1.20.4
source02Ready< none> 4d3hv1.20.4
source03Ready< none> 4d3hv1.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/??
推荐阅读
- #yyds干货盘点#python使用技巧之文件与路径管理
- #yyds干货盘点#wget/curl等ca证书失效问题解决办法
- 数据结构第五站(树和二叉树)
- Flutter 专题68 图解基本约束 Box#yyds干货盘点#
- k8s-day2-名词解释(master)
- #yyds干货盘点# 通过淘宝数据学习爬虫,python scrapy requests与response对象
- 阿里云基本概念与基础架构 #yyds干货盘点#
- #yyds干货盘点# CoCon: A Self-Supervised Approach for Controlled Text Generation | ICLR 2021 论文
- 来自面试官一面MySQL索引的连续灵魂拷问