Kubernetes(通常简写为K8s)是一个用于自动化容器化应用程序部署、扩展和管理的开源平台。它提供了一种容器编排的解决方案,可以帮助您管理和调度大规模的容器化应用程序。
Kubernetes 的设计目标是简化应用程序的部署、扩展和管理。它具有以下主要功能:
通过使用 Kubernetes,您可以更轻松地管理和扩展容器化应用程序,提高应用程序的可用性和弹性,并实现高效的资源利用。它已成为一个广泛使用的容器编排平台,在云原生应用程序的开发和部署中扮演着重要角色。
角色 | IP |
---|---|
master | 192.168.75.132 |
node1 | 192.168.75.133 |
node2 | 192.168.75.134 |
# 关闭防火墙(云服务器的就开启相关端口即可) master & node
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux(SELinux对容器内部的访问权限进行严格控制,可能会导致一些容器无法正常运行)
#master & node
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap(保证性能和可靠性) master & node 永久重启虚拟机
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
#(帮助 Kubernetes 正确识别和管理集群中的节点,并确保各种功能和配置的正常运行,必须唯一)
#master & node
hostnamectl set-hostname <hostname>
#hostnamectl set-hostname master
#hostnamectl set-hostname node1
#hostnamectl set-hostname node2
# 在master的/etc/hosts添加
192.168.75.132 k8smaster
192.168.75.133 k8snode1
192.168.75.134 k8snode2
# 将桥接的IPv4流量传递到iptables的链,为了支持 Kubernetes 中容器间网络通信和网络过滤功能而设置的。
#修改/etc/sysctl.d/k8s.conf文件 master & node
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 生效
sysctl --system
# 时间同步 master & node
yum install ntpdate -y
ntpdate time.windows.com
需另外安装docker,请自行安装
#创建/etc/yum.repos.d/kubernetes.repo文件
#通过执行该命令,系统会将这个仓库源添加到 YUM 的配置中,从而可以使用 YUM 命令来安装、更新和管理 Kubernetes 相关的软件包。
[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
kubeadm、kubelet 和 kubectl 是 Kubernetes 中的三个不同组件,各自承担着不同的角色和功能:
Kubeadm:
Kubelet:
Kubectl:
总结:
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
#系统启动时自动启用 Kubernetes
systemctl enable kubelet
#Master节点(192.168.75.132)使用
#在 kubeadm 初始话集群成功后会返回join 命令,里面有 token,discovery-token-ca-cert-hash等参数,需要记下来
kubeadm init \
#指定集群中其他节点访问该节点的地址
--apiserver-advertise-address=192.168.75.132 \
#指定使用的镜像仓库,国内阿里云仓库的好一点
--image-repository registry.aliyuncs.com/google_containers \
#指定k8s的版本
--kubernetes-version v1.18.0 \
#指定服务网络的 IP 范围。
--service-cidr=10.96.0.0/12 \
#指定 Pod 网络的 IP 范围
--pod-network-cidr=10.244.0.0/16
Kubectl的使用准备
mkdir -p $HOME/.kube
#为了确保当前用户具有访问和管理集群的权限,复制管理员配置文件 admin.conf 到 $HOME/.kube/config
#该配置文件包含了与 Kubernetes API 通信所需的认证凭据和连接信息。
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#获取当前集群中所有的节点信息
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
在Node节点192.168.75.133和192.168.75.134执行
Master节点(192.168.75.132)
kubeadm join 192.168.75.132:6443
--token esce21.q6hetwm8si29qxwn \
#基于 CA 证书的哈希值生成 证书不变这个不变 token和哈希值通过上文创建master节点之后显示的信息获取
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
为了满足容器之间和容器与外部网络之间的通信需求,需要使用容器网络接口(Container Network Interface,CNI)插件。CNI插件是一个独立的二进制工具,它负责在Kubernetes集群中创建、配置和管理容器网络。CNI插件在每个节点上为容器创建虚拟网络接口,并将这些接口连接到物理网络或其他容器网络中。
部署CNI网络插件在Kubernetes中有几个主要原因:
总而言之,部署CNI网络插件是为了支持Kubernetes集群中容器之间的通信和网络管理,使得容器在不同节点上可以高效地互联,并提供网络隔离和其他网络功能。
#下载Flannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#创建Flannel部署所需的各种资源
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#查看Pod的状态
kubectl get pods -n kube-system
#NAME READY STATUS RESTARTS AGE
#kube-flannel-ds-amd64-2pc95 1/1 Running 0 72s
创建一个Pod查看验证是否能够正常运行
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
访问地址:http://NodeIP:Port