简介:
Kubernetes(简称k8s)发布至今已经被越来越多的公司所接纳,其受欢迎程序更是超过了人们的想象,已逐渐成为很多公司的标配,尤为重要的时掌握kubernetes几乎成为所有互联网技术人员必备的一项技能。
Kubernetes(k8s)作为一个容器编排平台,提供了许多功能和特性,用于管理和部署容器化应用程序。下面是一些Kubernetes的主要功能:
-
自动化容器部署和管理:Kubernetes可以自动化地部署、更新和管理容器化应用程序。它提供了一种声明式配置的方式,以描述应用程序的预期状态,并确保集群中运行的应用程序与所需状态保持一致。
-
水平扩展和自动伸缩:Kubernetes允许根据负载情况自动扩展和收缩应用程序的实例数量。它可以根据资源使用情况自动调整副本数量,确保应用程序具有足够的计算资源来处理流量。
-
服务发现和负载均衡:Kubernetes提供了内建的服务发现机制,使得容器可以通过DNS名称或环境变量相互通信。它还支持负载均衡,将流量均匀地分发到后端的多个容器实例之间。
-
自我修复和健康检查:Kubernetes监视容器的状态,并在发生故障或不健康的情况下自动进行修复。它可以重新启动失败的容器实例,替换异常的节点,并确保应用程序的可用性和稳定性。
-
滚动升级和回滚:Kubernetes支持滚动升级应用程序,以减少对用户的影响。它可以逐步替换旧版本的容器实例,同时保持应用程序的可用性。如果升级失败或出现问题,可以轻松地回滚到之前的版本。
-
存储管理:Kubernetes提供了各种类型的存储卷(Volume),用于持久化容器中的数据。它支持主机路径、网络存储和云存储等多种存储后端,并提供了动态卷配置和挂载选项。
-
配置和密钥管理:Kubernetes允许通过配置文件、环境变量和密钥来管理应用程序的配置信息。它提供了一种集中式的方式来管理敏感信息,如数据库密码和API密钥。
-
日志和监控:Kubernetes集成了日志记录和监控功能,可以收集容器和集群级别的运行时数据。它支持将日志导出到外部系统,如ELK堆栈或云平台的监控服务。
这些功能使得Kubernetes成为一个强大的容器编排平台,能够简化应用程序的部署、管理和扩展。它提供了高度自动化和可扩展的解决方案,帮助用户管理复杂的容器化环境。
一、准备工作(在3台主机分别执行)
本次搭建需要读者自行准备3台具有2核CPU和4GB及以上内存的服务器,系统为Centos 7.x,1台作为Master,2台作为Node来使用;
主机名 | IP地址 | 说 明 |
master1 | 192.168.202.135 | 控制节点 |
node1 | 192.168.202.136 | 工作节点 |
node2 | 192.168.202.137 | 工作节点 |
1、所有节点配置主机名
hostnamectl set-hostname master1
hostnamectl set-hostname node1
hostnamectl set-hostname node2
2、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
3、关闭selinux
#临时
setenforce 0
#永久
vi /etc/selinux/config
SELINUX=disabled
4、所有节点配置hosts,修改/etc/hosts如下:
hostnamectl hostname master1
hostnamectl hostname node1
hostnamectl hostname node2
5、关闭swap分区
swapoff -a # 临时关闭
vim /etc/fstab # 注释到swap那一行 永久关闭
修改完成后 free -m #查看状态
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 # 生效
7、添加k8s阿里云yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
8、时间同步(以master为标准做同步)
yum install ntp
vi /etc/ntp.conf
# 在文件中找到 server 行,然后添加一个新的 server 行以指定新的 NTP 服务器的地址,
# 例如:192.168.202.135 这里写自己的master节点ip
systemctl start ntpd && systemctl enable ntpd
# 在两个Node节点 执行手动强制时间同步,以下ip修改为master的ip
ntpdate -u 192.168.202.135
# 在部署Kubernetes时,时间同步是一个建议执行的重要操作,尽管不是强制要求。时间同步对于整个Kubernetes集群的正常运行非常重要,因为许多Kubernetes组件和功能依赖于时间来进行协调和同步。
二、Docker安装(在3台主机分别执行)
1、更新Docker的yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 如果没有wge工具,手动下载一下
yum install wget -y
2、下载Docker(k8s1.24版本后 将不再支持docker,所以这里下载k8s1.23.6适配的Docker版本)
yum install docker-ce-19.03.13 -y
3、配置Docker镜像源
cd /etc && mkdir docker
cd docker
vim daemon.json # docker安装后daemon.json文件尚未存在,需要手动创建
{
"registry-mirrors":["https://registry.docker-cn.com"] ,
"exec-opts":["native.cgroupdriver=systemd"]
}
#(注意事项:registry.docker-cn.com有时也并不能连接上,可以采用下列国内的公共的docker镜像源:
#网易: http://hub-mirror.c.163.com #中国科技大学 https://docker.mirrors.ustc.edu.cn)
4、启动Docker
systemctl daemon-reload
systemctl restart docker && systemctl enable docker
三、k8s安装
1、安装kubeadm,kubelet,kubectl,并且指定版本,(因为1.24的版本默认运行时环境不是docker了,这里部署1.23.6版本)(在3台主机分别执行)
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
systemctl enable kubelet.service
kubelet --version # 验证k8s版本
2、在master服务器上进行初始化操作(master节点执行)
kubeadm init \
--apiserver-advertise-address=192.168.127.128 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
# 这里第2行--apiserver-advertise-address= 替换为自己的master节点 ip,其他配置不变
# 执行完后k8s将进行初始化操作,这里等待时间较长,初始化完成后会生成类似以下内容:
把红框内容拷贝下来,之后会使用到
3、完成初始化的新建文件和目录的操作,在master上完成(master节点执行)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
4、将Node节点加入集群(分别在两个Node节点执行)
# 将之前初始化 拷贝的内容拿来,粘贴到Node节点即可
kubeadm join 192.168.127.128:6443 --token gby6wo.wi9mid4m745i58jm \
--discovery-token-ca-cert-hash sha256:983ad455a06036bcb2b6dfb3f33f161cbe0edceeb13fa9c851659d260741e31b
#默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成(过期后再使用,当前部署不使用)
kubeadm token create --print-join-command
5、部署容器网络(master节点执行)
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
curl https://docs.projectcalico.org/v3.15/manifests/calico.yaml -O
vi calico.yaml
# 修改配置(搜索CALICO_IPV4POOL_CIDR位置,去掉注释,value值修改为k8s初始化时的网段值,
# 如果初始化时配置和我的一样,按我的配置即可)
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
# 修改完配置后,执行以下命令
kubectl apply -f calico.yaml
kubectl get pod -A | grep calico # 等待4个pod启动,五分钟以内,会陆续启动,并Running状态;
kubectl top node #calico启动后,会自动配置网络,等待片刻,节点状态会自动变为Ready状态。
# 到此k8s已经部署完成,如果想要node节点也可以执行kubectl命令:
scp ~/.kube/config root@192.168.202.136:~/.kube/config
scp ~/.kube/config root@192.168.202.137:~/.kube/config
# 如果报错node节点找不到目录,需手动node节点创建目录,创建后再执行scp命令
mkdir -p ~/.kube
# scp后node节点也可以使用kubectl命令了。
———————————————————————————————————————————
之后本账号会更新更多关于云原生、Devops相关内容,也会写"k8s常用命令"、“k8s高可用部署部署”文档,我会根据公司实战中比较实用的技能生产一些文章,感兴趣的可以关注小编!!!