简介:        

        Kubernetes(简称k8s)发布至今已经被越来越多的公司所接纳,其受欢迎程序更是超过了人们的想象,已逐渐成为很多公司的标配,尤为重要的时掌握kubernetes几乎成为所有互联网技术人员必备的一项技能。

        Kubernetes(k8s)作为一个容器编排平台,提供了许多功能和特性,用于管理和部署容器化应用程序。下面是一些Kubernetes的主要功能:

  1. 自动化容器部署和管理:Kubernetes可以自动化地部署、更新和管理容器化应用程序。它提供了一种声明式配置的方式,以描述应用程序的预期状态,并确保集群中运行的应用程序与所需状态保持一致。

  2. 水平扩展和自动伸缩:Kubernetes允许根据负载情况自动扩展和收缩应用程序的实例数量。它可以根据资源使用情况自动调整副本数量,确保应用程序具有足够的计算资源来处理流量。

  3. 服务发现和负载均衡:Kubernetes提供了内建的服务发现机制,使得容器可以通过DNS名称或环境变量相互通信。它还支持负载均衡,将流量均匀地分发到后端的多个容器实例之间。

  4. 自我修复和健康检查:Kubernetes监视容器的状态,并在发生故障或不健康的情况下自动进行修复。它可以重新启动失败的容器实例,替换异常的节点,并确保应用程序的可用性和稳定性。

  5. 滚动升级和回滚:Kubernetes支持滚动升级应用程序,以减少对用户的影响。它可以逐步替换旧版本的容器实例,同时保持应用程序的可用性。如果升级失败或出现问题,可以轻松地回滚到之前的版本。

  6. 存储管理:Kubernetes提供了各种类型的存储卷(Volume),用于持久化容器中的数据。它支持主机路径、网络存储和云存储等多种存储后端,并提供了动态卷配置和挂载选项。

  7. 配置和密钥管理:Kubernetes允许通过配置文件、环境变量和密钥来管理应用程序的配置信息。它提供了一种集中式的方式来管理敏感信息,如数据库密码和API密钥。

  8. 日志和监控:Kubernetes集成了日志记录和监控功能,可以收集容器和集群级别的运行时数据。它支持将日志导出到外部系统,如ELK堆栈或云平台的监控服务。

这些功能使得Kubernetes成为一个强大的容器编排平台,能够简化应用程序的部署、管理和扩展。它提供了高度自动化和可扩展的解决方案,帮助用户管理复杂的容器化环境。

一、准备工作(在3台主机分别执行)

        本次搭建需要读者自行准备3台具有2核CPU和4GB及以上内存的服务器,系统为Centos 7.x,1台作为Master,2台作为Node来使用;

主机名IP地址说        明
master1192.168.202.135控制节点
node1192.168.202.136工作节点
node2192.168.202.137工作节点

1、所有节点配置主机名

hostnamectl hostname master1

hostnamectl hostname node1

hostnamectl hostname node2

2、关闭防火墙

systemctl stop firewalld && systemctl disabele 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高可用部署部署”文档,我会根据公司实战中比较实用的技能生产一些文章,感兴趣的可以关注小编!!!

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐