搭建和学习k8s容器平台

前言

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

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

内容包括:

  • k8s的基础知识;
  • 使用kubedocker是干什么的adm工具搭建k8s平台。

学习要求:

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

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

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

交付正linux常运行的 Kuberneteskubernetes 集群所需dockers什么品牌的各种组件包括:

一些组件

  • 控制平面组件(Control Plane Components)

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

  • ​​​kube-apiserver​​dockers什么品牌

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

  • etcd

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

  • kube-scheduler

控制平面组docker安装部署件,负责监视新创建的、未指定运行docker安装部署​节点(node)​​​​​Pods​​​,选择linux操作系统基础知识节点让 Pod 在上面运行。

  • kube-controdockers什么品牌ller-manager

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

  • cloud-controller-managekubernetes架构详解r

云控制器管理器是指嵌入特定云的控制逻辑的​​控制平面​​​组件。 云控制器管理linux重启命令器使得你可以系统运维工作内容将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

  • Node 组件

节点组linux操作系统基础知识件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

  • kublinux系统安装elet

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

kubelinux操作系统基础知识-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

如果操作系统提供了数据包过滤层并kubernetes控制器可用kubernetes与docker的关系的话,kube-proxy系统/运维 会通过它来实现网络规则。否则, kkubernetesube-proxy 仅转发流量本身。

  • Container Runtime

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

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

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

二、k8s环境搭建

2.1 搭linux是什么操作系统建准备

  1. VMware station 12 pro

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

master节点linux常用命令: source01

node节点: source02、source03

要能​访问外网​环境,可以linux常用命令通过​克隆方式创建​多台,但得注意修改docker常用命令卡的uuid信息不能linux系统安装一致​(修改/etc/s系统运维工程师ysconfig/network-scripts/ifcfg-enslinux33中配置并重启网络服务docker镜像)或者删除网卡中的UUID并重启网络服务。


                                            搭建和学习k8s容器平台

2.2 初始化docker安装部署系统环境(三台虚机都要):

关闭防火墙和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 <<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 :运行在集群所有节点linux上,用于启动Pod和容器等对象的工具

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

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拉取镜像。 我本地有导入到的离线镜像,所以会优先使用本地的镜像。

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

# 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过程包括:

  • 安装docklinux重启命令er ydockers什么品牌um install docker-ce
  • 安装kubeadm yum install kubeadm
  • 使用kubeadm初始化k8s集群 kubeadockerdm init

2.4安装kubernetes网络组件-Calico

# kubectl apply -f /root/calico.yaml
注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

检查集群情况(Ready则正常)
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
xuegod63.cn Ready control-plane,master 26m v1.20.4

2.5安装-2.0

操作虚机:master

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

​​https://raw.githubulinuxsercontent.com/kubernetes/dasdocker菜鸟教程hboakubernetes控制器rdkubernetes怎么读/v2.0.0/aio/deploy/recommended.yaml​​

很多时候官方的资源我们不能够直接访问,可以docker是干什么的通过浏览器访问并使用ctrl+s进行保存,然后上传使用。

修改yaml文件

#linux vim recommended.yaml

在第42行下方添加2行

nodePort:docker镜像 30000

type: NodePort

增加完后,如下:


                                            搭建和学习k8s容器平台

默认的dashboardocker常用命令d是没有配置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


                                            搭建和学习k8s容器平台

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

token: ​e​yJhbGciOiJSUzI1NiIsImtpZCI6Il9VZzZoWU5ZNFRBb2tBak5系统运维工作内容0NzVFX3EzYjl6dnpSZnN1NlB2ckJHSXIxYTQifQ.eylinux必学的60个命令Jpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwidockers什么品牌a3ViZXJuZXRlcy5pby9zZXJ2aWNlYWvc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi10d系统/运维mRnMiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyjM2Yjkubernetes与docker的关系RiZmI3LTNiZWYtNDM0MS04ZmIzLTI2OTdlODgyZTM3MiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjlinux重启命令b3VudDprdWkubernetes架构详解Jlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRlinux命令hc2hib2FyZCJ9.A841TIi773u38wnzhWYx5sT-SAhjxLVd7JrqWOsnUGNEdwt9gbYsPesJQjoinNNd9VZgpOFidwLVUone4linux必学的60个命令gp46linuxW-D1schDXNLVQevuhS3Ud4gXhBsbrLpUkTokubernetesKMmkg6beJK0qJKQFBerF5Kz-8IOQBvwlat-PsbFdZgcFZRN7octYnEqcMGtl6Exh1qqGah-90J9xVY3E7IAUNdockers2w2r1hx0D


                                            搭建和学习k8s容器平台


                                            搭建和学习k8s容器平台

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
NAME STATUS ROLES AGE VERSION
source01 Ready control-plane,master 4d5h v1.20.4
source02 Ready <none> 4d3h v1.20.4
source03 Ready <none> 4d3h v1.20.4

docker安装部署何在普通的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的简单部署,可以开始尝试创建属于自己的项linuxdockerfile

关于​​Kubernetes 仪表板(Dash系统/运维board)​​的使用,也可以参考官方文kubernetes怎么读档:

​​https://kubernetes.io/zh/docs/tasks/access-linux命令application-cluster/web-uilinux必学的60个命令-dashboard/​​