1、K8S概述:
K8s是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩展容维护等功能,k8s的原名是kubernetes。
1.1、K8s的功能:
- 有大量跨主机的容器需要管理
- 快速部署应用快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用情况
- 服务发现与负载均衡
- 自动化部署与回滚、自动修复、自动扩缩容、维护等功能
1.2、核心角色与功能:
- master(管理节点):
作用:管理节点,提供集群的控制,对集群进行全局决策,检测和响应集群事件
组成:apiserver,scheduler,etcd和controllermanager服务组成
- node(计算节点)
作用:运行容器的实际节点,维护运行Pod,并提供具体应用的运行环境
组成:kubelet、kube-proxy和docker组成
- 镜像仓库
1.3、master节点服务
Api server:是整个系统的对外接口,供客户端和其它组件调用。
scheduler:负责对集群内部的资源进行调度,相当于“调度室”。两个过程:一种筛选,一种优选。
controller manager:负责管理控制器,相当于“大总管”。
etcd:kubernetes在运行过程中产生的元数据全部存储在etcd中。在键的组织上etcd采用了层次化的空间结构
2、集群部署(kubeadm方式)
2.1、环境准备
master(管理主机):2CPU、4G 192.168.4.10
node01(计算节点):2CPU、2G 192.168.4.11
node02(计算节点):2CPU、2G 192.168.4.12
2.2、以下操作需要在所有节点上执行
1)所有节点操作系统初始化,关闭swap、selinux、firewalld,关闭不需要的服务
[root@master ~]# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@master ~]# setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
[root@master ~]# systemctl stop postfix.service && systemctl disable postfix.service
2)Hosts文件的相互解析
[root@master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.4.10 master
192.168.4.11 node01
192.168.4.12 node02
3)针对Kubernetes调整内核参数,文件本身不存在
[root@master ~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 # 开启桥设备内核监控(ipv6)
net.bridge.bridge-nf-call-iptables = 1 # 开启桥设备内核监控(ipv4)
net.ipv4.ip_forward = 1 # 开启路由转发
[root@master ~]# modprobe br_netfilter # 加载内核模块,开启netfilter对bridge设备的监控
[root@master ~]# sysctl --system # 加载上面的k8s.conf配置文件
4)时间同步
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=8.8.8.8
[root@master ~]# systemctl restart network
[root@master ~]# yum -y install ntpdate
[root@master ~]# ntpdate time.windows.com
5)安装IPVS代理软件包
[root@master ~]# yum install -y ipvsadm ipset # 使用lvs负载均衡调用集群的负载均衡
[root@master ~]# ipvsadm -Ln # 查看设置的规则
6)配置yum源
[root@master ~]# yum -y install wget
# 安装epel源,并将repo 配置中的地址替换为阿里云镜像站地址
[root@master ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@master ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@master ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
# 下载阿里云的yum源文件
[root@master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
[root@master ~]# yum clean all && yum makecache
[root@master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置docker源
[root@master ~]# wget https://download.docker.com/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
# 添加阿里云软件
[root@master ~]# 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=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
7)配置镜像加速器
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}
EOF
8)安装软件
master节点上安装docker、kubeadm、kubelet、kubectl
node节点上安装docker、kubeadm、kubelet
[root@master ~]# systemctl daemon-reload
[root@master ~]# yum install -y docker-ce kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
[root@master ~]# systemctl enable docker && systemctl start docker
[root@master ~]# systemctl enable kubelet
[root@master ~]# docker info
[root@master ~]# docker info | grep "Cgroup Driver"
Cgroup Driver: systemd
9)设置tab键,可以使得kubeadm可以直接tab出来
[root@master ~]# kubectl completion bash >/etc/bash_completion.d/kubectl
[root@master ~]# kubeadm completion bash >/etc/bash_completion.d/kubeadm
[root@master ~]# exit
2.3、master节点上初始化集群
1)kubeadm部署K8S集群
[root@master ~]# kubeadm config images list # 查询K8S集群镜像的清单,可以用docker pull下载
[root@master ~]# kubeadm init \
--apiserver-advertise-address=192.168.4.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.10 \
--service-cidr=10.254.0.0/16 \
--pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
2)执行命令授权,该命令在安装完k8s后会有提示,完成集群的授权
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
3)验证kubeadm的安装
[root@master ~]# kubectl version
[root@master ~]# kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true","reason":""}
3)获取master的token,认证文件token存放在/etc/kubernetes/pki/ca.crt里
[root@master ~]# cat /etc/kubernetes/pki/ca.crt
[root@master ~]# kubeadm token list # 列出当前的token
TOKEN TTL EXPIRES USAGES DESCRIPTION
EXTRA GROUPSsks6id.zmd12cv1c4h975da 23h 2022-05-29T13:09:20Z authentication,signing The default bootstrap token generated
by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
[root@master ~]# kubeadm token delete sks6id.zmd12cv1c4h975da # 删除原有的token,因为有时间限制
bootstrap token "sks6id" deleted
[root@master ~]# kubeadm token create --ttl=0 --print-join-command # 创建生命周期为无限的token
kubeadm join 192.168.4.10:6443 --token 9scoj9.5fmlb4vqdxh8k51m --discovery-token-ca-cert-hash sha256:1d333f91bbe47d87a94ae65
cb8ce474db19e8c98fe49550c438408a8d1fef009
[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der |openssl dgst -sha256 -hex # 获取token_hash
2.4、node节点加入集群
[root@node01 ~]# kubeadm join 192.168.4.10:6443 --token <token> \
--discovery-token-ca-cert-hash sha256:<token ca hash>
1)flaanel网络插件文章来源:https://www.toymoban.com/news/detail-531068.html
- 方式一
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 方式二
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@master ~]# vim kube-flannel.yml
128 "Network": "10.254.0.0/16", # 与--pod-network-cidr保持一致
182 image: rancher/mirrored-flannelcni-flannel:v0.17.0
197 image: rancher/mirrored-flannelcni-flannel:v0.17.0
[root@master ~]# kubectl apply -f kube-flannel.yml
2.5、验证
[root@master ~]# kubectl create deployment nginx --image=nginx
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
[root@master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-85b98978db-pv6ns 1/1 Running 0 62m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 41h
service/nginx NodePort 10.254.55.99 <none> 80:31317/TCP 61m
- 浏览器访问: http://NodeIP:31317
master节点配置
mkdir /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
文章来源地址https://www.toymoban.com/news/detail-531068.html
到了这里,关于K8S—集群部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!