服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard

背景

最近公司在推行容器化,有必要对容器和K8S相关知识进行系统学习和复习。前段时间正好买了几台服务器,想着可以先搭建套K8S环境用于实际操作,搭建过程花费了一个周末的时间学习。这个过程中遇到了各种各样的问题,基本都在网上找到了答案。因此这个过程有必要整理和汇总一下,方便其他同学可以快速搭建,节省时间。

摘要

本文基于公有云主要介绍K8S的安装过程,涉及Master、Node节点的环境搭建,calico网络插件的使用;然后介绍Kuboard的安装以及K8S的简单操作命令,最后附上常见的报错安装与处理方式。

1.Kubernates Master节点的安装

1.1 环境配置:

[1] 关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

[2] 关闭selinux

# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config

# 临时关闭
setenforce 0 

[3] 关闭swap

# 临时
swapoff -a  
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab    

[4] 根据规划设置主机名

hostnamectl set-hostname k8smaster

k8smaster为自定义的hostname, 需要与[5]中保持一致

[5] 在master添加hosts

cat >> /etc/hosts << EOF
120.xx.xx.230 k8smaster
120.xx.xx.151 k8snode1
120.xx.xx.21 k8snode2
EOF

k8snode1和k8snode2为Node节点的自定义hostname

[6] 将桥接的IPv4流量传递到iptables的链

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system  # 生效

1.2 添加阿里云依赖

cat > /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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

1.3 配置Docker

{
	"registry-mirrors": [
		"https://n7d4jdun.mirror.aliyuncs.com",
		"https://7mimmp7p.mirror.aliyuncs.com",
		"https://registry.docker-cn.com",
		"http://hub-mirror.c.163.com",
		"https://docker.mirrors.ustc.edu.cn"
	],
	"insecure-registries": ["120.xx.xx.230:5000"],
	"exec-opts": ["native.cgroupdriver=systemd"],
	"log-driver": "json-file",
	"log-opts": {
		"max-size": "100m"
	},
	"storage-driver": "overlay2",
	"storage-opts": [
		"overlay2.override_kernel_check=true"
	]
}

重点是cgroup属性设置为systemd;
其中:120.xx.xx.230:5000配置的是本地镜像Harbor仓储地址,有需要参考服务器环境搭建-2 Docker与Harbor
修改配置后,需要重载配置文件以及重启Docker:

systemctl daemon-reload && systemctl restart docker

1.4 安装kubeadm、kubelet和kubectl

#安装
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
#设置为开机自启动以及启动
systemctl enable kubelet && systemctl start kubelet

安装时可以指定版本,比如需要安装1.23.0的Kubernates:

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0 --disableexcludes=kubernetes

1.5 kubeadm init 主节点初始化

kubeadm init --image-repository registry.aliyuncs.com/google_containers  \
	--kubernetes-version v1.23.0  \
	--pod-network-cidr 10.244.0.0/16  \
	--apiserver-advertise-address 120.xx.xx.230

120.xx.xx.230为Master节点的地址,用于设置API Server地址;之后Node节点通过该IP加入集群。
等待一段时间,直到出现如下信息:
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第1张图片
这里注意复制保存一下 kubeadm join这行的命令,之后再Node节点上执行。

初始化完成后,需要配置kubeconfig路径:

export KUBECONFIG=/etc/kubernetes/admin.conf

2.Kubernates Node节点的安装

2.1 环境配置与软件安装

在各Node节点上分别执行1.1-1.4;
这里我将两个Node节点分别自定义为k8snode1和k8snode2;

2.2 kubeadm join加入集群

执行kubeadm join命令:
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第2张图片
此时,登录Master节点,查看各节点运行情况:
在这里插入图片描述
发现k8snode1和k8snode2处于NotReady状态,因为尚未安装网络插件。

3.Calico安装

3.1 配置NetworkManager

cat > /etc/NetworkManager/conf.d/calico.conf <
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali
EOF

3.2 配置calico.yaml

【1】下载calico.yaml文件

wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate

【2】修改镜像地址 calico.yaml
防止下载calico需要的镜像失败,建议作如下修改:

#docker.io/calico/xxx 修改为:calico/cni:v3.23.0
sed -i 's#docker.io/##g' calico.yaml

【3】根据配置文件安装calico

kubectl apply -f calico.yaml

查看calico的安装进度:
在这里插入图片描述
安装完成后,再次查看各节点的状态:
在这里插入图片描述
发现节点均处于Ready状态,表面Kubernates安装完成。

4.Kuboard安装

当k8s整体安装完成后,Kuboard安装就轻松了。

kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml

服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第3张图片

#查看Kuboard的安装进度
kubectl get pods -n kuboard

如下表示Kuboard安装成功:
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第4张图片
Kuboard的默认用户密码为: admin/Kuboard123
访问地址: http://{master/node_ip}:30080
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第5张图片

5.K8S操作演示

由于后续会专题介绍K8S原理和操作,所以这里围绕kubectl命令进行简单介绍。

5.1 kubectl run创建pod

[1] 首先创建一个命名空间:

kubectl create ns seong

服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第6张图片
[2] 在seong中直接运行一个pod

kubectl run httpd-instance --image=httpd -n seong

在这里插入图片描述
【3】查看pod状态

kubectl get pods -n seong -o wide

发现pod被调度到k8snode1上:
在这里插入图片描述
登录Kuboard查看情况:
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第7张图片

5.2 通过yaml文件创建deploy负载

【1】创建一个简单的deploy资源的yml文件:
还是以httpd为例,创建一个deployment,并设置副本数目为2,yml文件如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-httpd
  labels:
    app: httpd
spec:
  replicas: 2
  selector:
    matchLabels:
      app: httpd
  template:
    metadata:
      labels:
        app: httpd
    spec:
      containers:
      - name: httpd
        image: httpd
        ports:
        - containerPort: 80

【2】创建deploy负载

kubectl apply -f testHttpd.yaml -n seong

服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第8张图片
【3】登录Kuboard查看deploy状态
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第9张图片
上图显示两个httpd副本运行正常;后面可以直接通过Kuboard进行K8S资源的创建,通过界面操作而非yml的方式会更轻松,读者可以自行操作。

6.公有云导致etcd初始化失败

由于公网IP在云服务器上不可见,如果配置api-server地址为公有云地址时(不设置时,从节点无法连接),etcd会在初始化过程中报错;可通过开启EIP直通,使得公网IP再本机可见:
【1】下载sh脚本

wget https://eip-direct-1254277469.cos.ap-guangzhou.myqcloud.com/eip_direct.sh

【2】2.执行shell:

chmod +x eip_direct.sh
./eip_direct.sh install XX.XX.XX.XX

xx.xx.xx.xx表示云服务器的对外公网IP;
【3】在公有云控制台上,开启EIP直通
服务器环境搭建-3 Kubernates环境搭建:K8S+calico+Kuboard_第10张图片
【4】在服务器上查询是否完成开通
在这里插入图片描述

注意:安装时,需要保证各节点的版本一致;安装失败时,也可以排查一下上述步骤是否有被跳过:如Docker的cgroup需设置为systemd,防火墙保持关闭等;
其他问题基本可以通过journalctl -xeu kubelet | grep Failed 结合Docker logs诊断以及网上搜索解决。

你可能感兴趣的:(容器化,服务器,docker,kubernetes,容器)