基于centos 7.2部署k8s v1.18.0集群

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 基于centos 7.2部署k8s v1.18.0集群

基于centos 7.2部署k8s v1.18.0集群

最近k8s的官方版本已经更新到最新版本,小编在centos7.2的系统上部署最新的v1.18.0
并将安装步骤记录下来,本文对k8s的基础知识不做介绍,如果想了解基本知识请移步k8s官网查阅。
组件版本:
Kubernetes v1.18.0
calico 3.13.1
docker 19.03.8

一 环境准备和部署方式
1 环境准备
Kubernetes系统可运行于多种平台之上,包括虚拟机、裸服务器或PC等,若仅用于快速了解或开发的目的,那么可直接于单个主机之上部署Kubernetes集群,将集群的所有组件均部署运行于单台主机上,本文想学习Kubernetes集群的完整功能,应该构建真正的分布式集群环境,将Master和Node等部署于多台主机之上,本文采用1 master+2 node的形式,
三台主机:
角色 操作系统 内存 cpu 磁盘/GB Ip地址
Master Centos7.2 4 2 40 172.20.128.6
Node1 Centos7.2 4 2 40 172.20.128.7
Node2 Centos7.2 4 2 40 172.20.128.8
第二种:
采用kubeadm工具进行部署,由k8s官方所提供的专门部署集群的管理工具, 每一个节点主机上包括master节点都要手动安装并运行docker,同时也都要手动安装并运行kubelet。如果将第一个节点初始化为master节点,在执行初始化这个步骤,其实就是通过kubeadm工具将API Server、etcd、controller-manager、scheduler各组件运行为Pod,也就是跑在docker上。而其他node节点,因已经运行了kubelet、docker组件,剩下的kube-proxy组件也是要运行在Pod上。

本文采用kubeadm工具进行部署,kubeadm是Kubernetes项目自带的集群构建工具,它负责执行构建一个最小化的可用集群以及将其启动等的必要基本步骤,简单来讲,kubeadm是Kubernetes集群全生命周期的管理工具,可用于实现集群的部署、升级/降级及拆除,下图为kubeadm的功能示意图。
1

二 环境部署
1 环境检查
a) 主机名称
三个主机分别命名为master.k8s.com、node1.k8s.com、node2.k8s.com
hostnamectl set-hostname your-new-host-name
b) 查看修改结果
hostnamectl status
c) 设置 hostname 解析
echo "127.0.0.1 $(hostname)" >> /etc/hosts
d) 检查网络
ip address可显示默认网卡的 IP 地址,Kubernetes 将使用此 IP 地址与集群内的其他节点通信如 172.20.128.6,所有节点上 Kubernetes 所使用的 IP 地址必须可以互通(无需 NAT 映射、无安全组或防火墙隔离)

2 安装docker及kubelet
在 master 节点和 worker 节点都要执行
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
a) 检查和卸载旧版本(如果之前有安装docker)
yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

b) 配置yum repository
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

c) 安装并启动docker
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8 containerd.io
systemctl enable docker
systemctl start docker

d) 安装 nfs-utils
yum install -y nfs-utils
yum install -y wget

e) 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

f) 关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

g) 关闭swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab

h) 卸载旧安装版本
yum remove -y kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl
2

i) 修改docker Cgroup Driver为systemd
sed -i "s#^ExecStart=/usr/bin/dockerd.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd#g" /usr/lib/systemd/system/docker.service

j) 设置 docker 镜像,提高 docker 镜像下载速度和稳定性
curl -sSL https://kuboard.cn/install-script/set_mirror.sh | sh -s ${REGISTRY_MIRROR}
k) 重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker
systemctl enable kubelet && systemctl start kubelet
docker version

3 初始化master节点
设置环境变量:
export MASTER_IP=172.20.128.6
export APISERVER_NAME=apiserver.demo
export POD_SUBNET=10.100.0.1/16
echo "172.20.128.6 ${APISERVER_NAME}" >> /etc/hosts

配置kubeadm-config.yaml文件
cat < ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.18.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "172.20.128.6:6443"
networking:
serviceSubnet: "10.96.0.0/16"
podSubnet: "10.100.0.1/16"
dnsDomain: "cluster.local"
EOF

kubeadm init
kubeadm init --config=kubeadm-config.yaml --upload-certs
执行完毕后如下截图。
kubeadm join 172.20.128.6:6443 --token 4sad52.9lqsr40fmmi29723 --discovery-token-ca-cert-hash sha256:edddce9484037bc6e2d19f3c7ce53c629cb97c198f761c9de49463be85a21dc5
3

3 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config

4 安装 calico 网络插件
wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
kubectl apply -f calico-3.13.1.yaml

4

5 master上验证
执行命令验证集群状态已经正常
kubectl get nodes
kubectl get nodes -o wide

5

到此,基于centos7.2的K8S v1.18.0集群安装完毕并验证集群运行正常。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
机器学习/深度学习 文字识别 Linux
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
11 1
百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - CentOS 7)
|
11天前
|
canal Kubernetes Docker
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(03部分)
|
6天前
|
Kubernetes 安全 数据安全/隐私保护
Kubernetes(K8S) 集群安全机制
Kubernetes(K8S) 集群安全机制
15 2
|
12天前
|
Kubernetes Ubuntu Linux
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(02部分)
|
13天前
|
Prometheus 监控 Kubernetes
|
5天前
|
应用服务中间件 Linux 网络安全
如何在 CentOS 6.5 上使用 Unicorn 和 Nginx 部署 Rails 应用
如何在 CentOS 6.5 上使用 Unicorn 和 Nginx 部署 Rails 应用
8 0
|
6天前
|
Kubernetes 应用服务中间件 API
Ingress:K8S集群进出流量的总管
【8月更文挑战第14天】创建Ingress时可通过`kubectl create`命令指定所属的Ingress Class及路由规则。部署Ingress Controller时需定制配置文件以适应特定环境需求。
|
12天前
|
Kubernetes 应用服务中间件 nginx
[kubernetes]二进制部署k8s集群-基于containerd
[kubernetes]二进制部署k8s集群-基于containerd
|
12天前
|
Prometheus Kubernetes 网络协议
[kubernetes]集群中部署CoreDNS服务
[kubernetes]集群中部署CoreDNS服务
|
13天前
|
Kubernetes Linux 网络安全
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)
基于Kubernetes v1.25.0和Docker部署高可用集群(01部分)