容器-基于Docker构建Kubernetes集群

嚯嚯嚯www 发表于 2022/05/19 14:28:46 2022/05/19
【摘要】 无可置疑,kubernetes是当下最流行的PaaS平台。k8s是谷歌开源的一个分布式容器集群管理系统。k8s的能力不仅仅是编排容器,更能提供负载均衡、弹性伸缩、DevOps等功能。本次将基于Docker容器,实现Kubernetes实验环境的部署。Pod 是 K8S 中最重要也是最基本的概念,Pod 是最小的部署单元,是一组容器的集合。每个 Pod 都由一个特殊的根容器 Pause 容器,...

无可置疑,kubernetes是当下最流行的PaaS平台。k8s是谷歌开源的一个分布式容器集群管理系统。k8s的能力不仅仅是编排容器,更能提供负载均衡、弹性伸缩、DevOps等功能。本次将基于Docker容器,实现Kubernetes实验环境的部署。
Pod 是 K8S 中最重要也是最基本的概念,Pod 是最小的部署单元,是一组容器的集合。每个 Pod 都由一个特殊的根容器 Pause 容器,以及一个或多个紧密相关的用户业务容器组成。Pause 容器作为 Pod 的根容器,以它的状态代表整个容器组的状态。K8S 为每个 Pod 都分配了唯一的 IP 地址,称之为 Pod IP。Pod 里的多个业务容器共享 Pause 容器的IP,共享 Pause 容器挂载的 Volume。
实验环境:
master节点: 192.168.1.10/centos
node节点: 192.168.1.11/centos
本次实验采用离线部署,包括kubeadm、kubelet、kubectl的离线yum仓库,核心组件容器镜像、dashboard与flannel网络配置

1.系统环境准备

yum环境配置
此处实验已经将k8s安装源,所需docker镜像,yaml配置文件放在本地
image.png

master节点配置本地yum源,开启ftp为node节点提供yum源

image.png
image.png

配置hosts文件,master节点与node节点做法相同

[root@master K8S]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.10 master
192.168.1.11 node

关闭swap,关闭swap挂载,master节点与node节点做法相同
image.png

升级系统内核,重启,master节点与node节点做法相同
[root@master K8S]# yum -y upgrade

开启路由转发,master节点与node节点做法相同

[root@master ~]# touch /etc/sysctl.d/K8S.conf
[root@master ~]# vim /etc/sysctl.d/K8S.conf

#以下内容写入文件

[root@master ~]# modprobe br_netfilter
[root@master ~]# sysctl -p /etc/sysctl.d/K8S.conf 
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

image.png

node节点相同操作

2.Chrony时间同步配置

master节点配置chrony服务

[root@master ~]# yum –y install chrony
[root@master ~]# vim /etc/chrony.conf

#修改配置文件如图

[root@master ~]# systemctl enable chronyd
[root@master ~]# systemctl restart chronyd
[root@master ~]# timedatectl set-ntp true

image.png

node节点配置chrony服务

[root@node ~]# yum -y install chrony
[root@node ~]# vim /etc/chrony.conf 

#修改配置文件如图,server处设置为master的地址即可

[root@node ~]# systemctl enable chronyd
[root@node ~]# systemctl restart chronyd

image.png

node节点执行chronyc sources,如图配置成功
image.png

3.配置IPVS

[root@master ~]# touch /etc/sysconfig/modules/ipvs.modules
[root@master ~]# vim /etc/sysconfig/modules/ipvs.modules

#写入以下内容

#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4



[root@master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules
[root@master ~]# bash /etc/sysconfig/modules/ipvs.modules

#验证

[root@master ~]# lsmod|grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  0 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145497  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139224  2 ip_vs,nf_conntrack_ipv4
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack
[root@master ~]# yum -y install ipset ipvsadm

node节点相同操作

4.Docker 安装

此处docker安装不多做解释

[root@master ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@master ~]# yum -y install docker-ce docker-ce-cli containerd.io
[root@master ~]# systemctl start docker
[root@master ~]# touch /etc/docker/daemon.json
[root@master ~]# vim /etc/docker/daemon.json 

#写入以下内容到文件

{
  "exec-opts":["native.cgroupdriver=systemd"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker

node节点相同操作

5.安装Kubernetes集群

安装服务并设置启动

[root@master ~]# yum -y install kubelet kubeadm kubectl
[root@master ~]# systemctl enable kubelet
[root@master ~]# systemctl start kubelet

master节点运行脚本,加载镜像到docker
[root@master K8S]# ./kubernetes_base.sh
node节点相同操作

初始化Kubernetes集群
master节点配置
[root@master K8S]# kubeadm init --apiserver-advertise-address 192.168.1.10 --kubernetes-version="v1.14.1" --pod-network-cidr=10.16.0.0/16
#–pod-network-cidr=10.16.0.0/16此参数需要慎重考虑,需要和后续fannel网络配合
#运行如下成功,最后输出的为其余节点加入集群的命令

kubeadm join 192.168.1.10:6443 --token j7ounb.afbmhmgmifg86ybd \
    --discovery-token-ca-cert-hash sha256:52e9c7afb44aea691efe52822148bd51fb71e8bca7e0d2a49df6443a9d0e2a71

image.png

初始化操作主要经历了下面 15 个步骤,每个阶段均输出均使用[步骤名称]作为开头:

[init]:指定版本进行初始化操作。 
[preflight]:初始化前的检查和下载所需要的 Docker 镜像文件。 
[kubelet-start]:生成 Kubelet 的配置文件/var/lib/kubelet/config.yaml,没有这个文件Kubelet 无法启动,所以初始化之前的 Kubelet 实际上启动失败。 
[certificates]:生成 Kubernetes 使用的证书,存放在/etc/kubernetes/pki 目录中。 
[kubeconfig]:生成 KubeConfig 文件,存放在/etc/kubernetes 目录中,组件之间通信 需要使用对应文件。 
[control-plane]:使用/etc/kubernetes/manifest 目录下的 YAML 文件,安装 Master 组 件。
[etcd]:使用/etc/kubernetes/manifest/etcd.yaml 安装 Etcd 服务。 
[wait-control-plane]:等待 control-plan 部署的 Master 组件启动。 
[apiclient]:检查 Master 组件服务状态。 
[uploadconfig]:更新配置。 
[kubelet]:使用 configMap 配置 Kubelet。 
[patchnode]:更新 CNI 信息到 Node 上,通过注释的方式记录。 
[mark-control-plane]:为当前节点打标签,打了角色 Master 和不可调度标签,这样默认就不会使用 Master 节点来运行 Pod。 
[bootstrap-token]:生成的 Token 需要记录下来,后面使用 kubeadm join 命令往集群中添加节点时会用到。 
[addons]:安装附加组件 CoreDNS 和 kube-proxy。 

创建用户配置文件夹
Kubectl默认会在执行的用户home目录下面的.kube目录中寻找config文件,配置kubectl 工具。
此处为root用户创建目录复制配置文件

[root@master ~]# mkdir /root/.kube
[root@master ~]# cp -i /etc/kubernetes/admin.conf /root/.kube/config
[root@master ~]# chown root:root /root/.kube/config

检查集群状态
image.png

配置flannel网络

[root@master K8S]# ls
images  Kubernetes  kubernetes_base.sh  yaml
[root@master K8S]# kubectl apply -f yaml/kube-flannel.yaml

image.png

Node节点加入集群
[root@node ~]# kubeadm join 192.168.1.10:6443 --token e20is5.o38kb995lp24huk5 --discovery-token-ca-cert-hash sha256:4625049a4ff225437950b0de1e211ee4b9d1d1e750ee2e04b25d5664ca0aed16

master上执行kubectl get nodes查看节点状态,成功加入后节点显示ready
image.png

安装Dashboard
#安装kubernetes-dashboard

[root@master K8S]# kubectl create -f yaml/kubernetes-dashboard.yaml 
secret/kubernetes-dashboard-certs created
serviceaccount/kubernetes-dashboard created
role.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-minimal created
deployment.apps/kubernetes-dashboard created
service/kubernetes-dashboard created

#创建dashboard用户

[root@master K8S]# kubectl create -f yaml/dashboard-adminuser.yaml 
serviceaccount/kubernetes-dashboard-admin created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard-admin created

检测pods状态
kubectl get pods –n kube-system
image.png

若操作正常此时已经全部running状态,若有相关服务不在running状态请排错嗷

查看dashboard服务端口号,映射外部为30000端口
kubectl get svc –n kube-system
image.png

浏览器访问https://ip:30000
image.png

k8s Dashboard登陆需要令牌
kubectl -n kube-system describe secret kubernetes-dashboard-admin-token
image.png

将token:后面字符串输入网页登陆
image.png

kubernetes部署到此

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。