K8s 详细安装部署流程
(3)Pod IP是容器组Pod的IP地址,是在容器组初始化过程由Pause容器申请的IP地址。其中Pod IP是容器网络接口CNI与具体的网络插件来实现IP的申请及数据包的转发。(1)Cluster IP是Service对象的IP地址,实现Pod服务的负载均衡,外部网络无法ping通,只在集群内部可以访问使用,是一个虚拟的IP。(2)Node IP是集群节点Node的IP地址,可以是物理机的IP
1. 环境准备
1.1 服务器配置要求
- 3台机器,操作系统 CentOS7.9-64位系统
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘20GB或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像 禁止swap分区
1.2 服务器配置要求
软件 | 版本 |
操作系统 | CentOS7.9_x64 |
Docker | 20-ce |
Kubernetes | 1.23 |
1.3 服务器配置要求
服务器名称 | 服务器IP |
master | 192.168.134.133 |
node1 | 192.168.134.132 |
node2 | 192.168.134.131 |
2. 环境准备
2.1 执行以下命令(3台机器):
cat >> /etc/hosts << EOF
192.168.134.133 master
192.168.134.132 node1
192.168.134.131 node2
EOF
2.2 设置主机别名
#命令:hostnamectl set-hostname <hostname>
#示例:
# 192.168.134.133(在master节点执行)
hostnamectl set-hostname master
# 192.168.134.132(在node1节点执行)
hostnamectl set-hostname node1
# 192.168.134.131(在node2节点执行)
hostnamectl set-hostname node-2
2.3 关闭防火墙(3台机器)
systemctl stop firewalld #关闭防火墙
systemctl disable firewalld #设置开机禁用
2.4 关闭selinux服务(3台机器)
sed -i 's/enforcing/disabled/' /etc/selinux/config #重启后生效
2.5 关闭swap分区(3台机器)
当内存不足时,linux会自动使用swap,将部分内存数据存放到磁盘中。swap会导致docker的运行不正常,性能下降,还可能产生其他问题,因此部署k8s集群时一定要关闭swap分区。在每个节点(三台机器)上都进行以下操作:
vi /etc/fstab
#注释掉下面的设置
/dev/mapper/centos-swap swap
2.5 添加网桥过滤和地址转发功能(3台机器)
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#然后执行
sysctl --system //生效命令
3. 容器组件安装
3.1 安装docker(3台机器)
#查看系统是否已安装docker
rpm -qa|grep docker
#卸载旧版本docker
sudo yum remove docker*
#安装yum工具包
yum -y install yum-utils
#设置阿里云的stable 镜像仓库
yum-config-manager
--add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker的指定版本
sudo yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io
#启动docker并设置开机自启,若启动或设置失败(把docker目录全部删除,手动创建)
systemctl start docker
systemctl enable docker
# 验证 Docker 是否安装成功,查看docker状态
systemctl status docker
docker version
#创建docker配置
mkdir -p /etc/docker
#配置阿里云镜像加速:
tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://du3ia00u.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://registry.docker-cn.com"
],
"live-restore": true,
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"storage-driver": "overlay2"
}
EOF
#使之生效
systemctl daemon-reload
#重启docker
systemctl restart docker
3.2 安装k8s
3.2.1 k8s镜像切换成国内源(3台机器)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
3.2.2 安装kubeadm、kubelet和kubectl(3台机器)
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
# 验证并查看安装版本
kubelet --version
#设置kubelet开机启动
systemctl enable kubelet
3.2.3 部署k8s(只在master节点执行)
kubeadm init \
--apiserver-advertise-address=192.168.134.133 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
说明:
apiserver-advertise-address =Master节点的 IP 地址。
image-repository=docker镜像仓库地址。
kubernetes-version= 安装的kubernetes版本
service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一个网络范围内。
不要使用 172.17.0.1/16 网段范围,因为这是 Docker 默认使用的。初始化可能比较慢。
#创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 生成一个永不过期的token,系统会生成一个kubeadm join命令:
kubeadm token create --ttl 0 --print-join-command
# 部署 Kubernetes 的 Node节点(master节点)
kubeadm join 192.168.134.133:6443 \
--token znzat2.pcyncojhuc36yxol \
--discovery-token-ca-cert-hash \
sha256:97e5e7d9b1a5dda39e9e95559896b8bb5695325e2f093bccc115da81d9cfd9d2
3.2.4部署网络插件(master节点)
Kubernetes本身并没有自己实现容器网络,而是借助CNI标准,通过插件化的方式来集成各种网络插件,实现集群内部网络相互通信。
Kubernetes集群设计了Cluster IP、Node IP、Pod IP三种类型的通信IP:
(1)Cluster IP是Service对象的IP地址,实现Pod服务的负载均衡,外部网络无法ping通,只在集群内部可以访问使用,是一个虚拟的IP。
(2)Node IP是集群节点Node的IP地址,可以是物理机的IP(也可能是虚拟机IP)。
(3)Pod IP是容器组Pod的IP地址,是在容器组初始化过程由Pause容器申请的IP地址。其中Pod IP是容器网络接口CNI与具体的网络插件来实现IP的申请及数据包的转发。
# 下载CNI网络插件
wget https://docs.projectcalico.org/manifests/calico.yaml
# 下载完之后还需要修改里面定义的pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init初始化的–pod-network-cdir(pod所使用的网络)指定的一样;
vim calico.yaml
# 部署 calico
kubectl apply -f calico.yaml
# 查看pods,pod都Running之后,node节点也会准备就绪
kubectl get pods -n kube-system
kubectl get nodes
所有节点都变成ready,k8s则已经部署完成
3.3 安装Nginx
部署nginx测试
#先创建一个yaml文件
vim nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
# 文件保存,执行以下命令
kubectl apply -f nginx.yaml
#再创建一个yaml文件
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
# 保存文件,执行以下命令
kubectl apply -f nginx-service.yaml
#查看服务 (Running说明启动成功)
kubectl get pod,svc
在浏览器输入对应的ip和端口,访问nginx
http://192.168.134.133:32252/
更多推荐
所有评论(0)