K8S的集群搭建
k8s的搭建
一、环境配置(三台主机都需要配置)
修改ip地址和主机名
node1的主机名修改 node2和master都按这种来设置
[root@web02 ~]# hostnamectl set-hostname node1 && bash
[root@node1 ~]# hostname
node1
[root@node1 ~]#
主机 | 主机名 |
192.168.58.12 | node1 |
192.168.58.13 | node2 |
192.168.58.11 | master |
ip地址可以使用 nmtui 命令来修改 图形化简洁方便
关闭防火墙
默认情况下,防火墙可能会限制Docker容器与外部网络的通信。
[root@node1 ~]# systemctl stop firewalld && systemctl disable firewalld
关闭selinux
SELinux可能会与Docker的运行方式不兼容,导致一些问题。
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
#防火墙
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# systemctl stop firewalld
关闭swap
swap分区在系统内存不足时会将部分数据写入硬盘,但是这会影响到Kubernetes的性能表现。
kubelet要求必须禁用交换分区,所以kubeadm初始化时回检测swap是否关闭
# 临时关闭,重启恢复
[root@node1 ~]# swapoff -a
# 永久关闭
echo vm.swappiness = 0 >> /etc/sysctl.conf
[root@node1 ~]# sysctl -p
[root@node1 ~]# cat /etc/fstab
/dev/mapper/centos-swap swap swap defaults 0 0
文件内修改关闭swap分区 /etc/fstab
设置系统参数
[root@node1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
修改hosts配置(配置主机的映射)
配置好了互相ping一下 是否连通
# vim /etc/hosts
192.168.58.11 master
192.168.58.12 node1
192.168.58.13 node2
配饰ssh免密登录
[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id node1
[root@node1 ~]# ssh-copy-id node2
[root@node1 ~]# ssh-copy-id node3
二、安装k8s组件(三台机器都需要执行)
安装docker
dokcer依赖的安装
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
设置docker仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
设置阿里云镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://orptaaqe.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
安装docker并启动
1.安装docker
yum install -y docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io
2.启动docker
systemctl start docker && sudo systemctl enable docker
[root@node1 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2024-06-25 13:04:05 CST; 3min 44s ago
Docs: https://docs.docker.com
Main PID: 1014 (dockerd)
Tasks: 17
Memory: 121.6M
CGroup: /system.slice/docker.service
└─1014 /usr/bin/dockerd -H unix://
3.检查docker
ps -ef|grep docker
[root@node1 ~]# ps -ef|grep docker
root 1014 1 0 13:04 ? 00:00:01 /usr/bin/dockerd -H unix://
root 8551 8537 0 13:07 pts/0 00:00:00 grep --color=auto docker
安装kubeadm, kubelet and kubectl
配置yum源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm &kubelet&kubectl
按顺序安装:
yum install -y kubectl-1.14.0-0
yum install -y kubelet-1.14.0-0
yum install -y kubeadm-1.14.0-0
检查:
kubectl version
kubelet --version
kubeadm version
docker和k8s 设置同一个cgroup
# 编辑docker的daemon.json文件,每个节点都要执行
vi /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=systemd"],
systemctl restart docker
# 启动 kubelet
systemctl enable kubelet && systemctl start kubelet
三、配置国内镜像
创建kubeadm.sh脚本,拉取镜像/打tag/删除原有镜像
#!/bin/bash
set -e
KUBE_VERSION=v1.14.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
运行脚本和查看镜像
# 更改一下 执行权限 再执行
# 运行脚本
sh ./kubeadm.sh
# 查看镜像
docker images
四、kube init初始化master(主节点)
主节点执行初始化得到 节点加入代码--------------------初始化master节点
version 版本号 address 为master的地址 --pod-network-cidr 是pod的网段
#这段代码要再主节点执行 意思为kube init初始化
[root@master ~]# kubeadm init --kubernetes-version=1.14.0 \
--apiserver-advertise-address=192.168.58.11 --pod-network-cidr=10.244.0.0/16
master 执行过后会得到一句 这句话一定要复制粘贴出来
kubeadm join 192.168.58.11:6443 --token 11j746.3087yrzi2zp8gszc \
--discovery-token-ca-cert-hash sha256:a96d9fe3a8b4562b4e00200fe10462d55eacbfbb08ec5bf737303df95061dedb
接下来主节点再执行
#创建目录 拷贝文件 修改文件的属性
mkdir -p $HOME/.kube
cd .kube/
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
主节点上完成这三步操作,才有 .kube 目录,如果从节点上也完成了这三句,也有 .kube 目录,也是可以通过 kubectl 命令操作k8s集群的。
验证pod和健康检查(这两句也是只在master节点上执行)
kubectl get pods -n kube-system
# 健康检查(不要怀疑,就是healthz)
curl -k https://localhost:6443/healthz
五、部署calico网络插件(主节点)
网络插件是为了k8s集群内部通信,这里选择calico,同样在master节点上操作
# 在k8s中安装calico(这条命令很快的)
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
# 确认一下calico是否安装成功 -w可以实时变化(看到calico都好了表示网络插件好了)
kubectl get pods --all-namespaces -w
calico两个显示Running就表示安装成功了
[root@master ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-f67d5b96f-lqsmh 1/1 Running 0 2m49s
kube-system calico-node-5xsmc 1/1 Running 0 2m50s
kube-system calico-node-ghq69 1/1 Running 0 2m50s
kube-system calico-node-r8cnv 1/1 Running 0 2m50s
kube-system coredns-fb8b8dccf-dfmvq 1/1 Running 0 27m
kube-system coredns-fb8b8dccf-fjr57 1/1 Running 0 27m
kube-system etcd-master 1/1 Running 0 26m
kube-system kube-apiserver-master 1/1 Running 0 26m
kube-system kube-controller-manager-master 1/1 Running 0 26m
kube-system kube-proxy-2mkp6 1/1 Running 0 27m
kube-system kube-proxy-kwflj 1/1 Running 0 27m
kube-system kube-proxy-z6hw2 1/1 Running 0 27m
kube-system kube-scheduler-master 1/1 Running 0 26m
六、kube join(从节点)
在从节点上执行kube join命令 这里的命令就是刚刚master主节点初始化后系统所给的命令
[root@node1 ~]# kubeadm join 192.168.58.11:6443 --token 11j746.3087yrzi2zp8gszc --discovery-token-ca-cert-hash sha256:a96d9fe3a8b4562b4e00200fe10462d55eacbfbb08ec5bf737303df95061dedb
然后在master节点上检查集群信息
kubectl get nodes
七、新建Pod测试整个集群
定义pod.yml文件,比如pod_nginx_rs.yaml 此文件内容网络上找的 用来测试一下
cat > pod_nginx_rs.yaml <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
labels:
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
name: nginx
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
EOF
根据pod_nginx_rs.yml文件创建pod
#这个文件为创建的时候为隐藏文件 进入文件执行 kubectl命令进行测试
[root@master .kube]# kubectl apply -f pod_nginx_rs.yaml
replicaset.apps/nginx created
查看pod
kubectl get pods # 列出pod
kubectl get pods -o wide #列出pod时显示pod IP和pod的节点
kubectl describe pod nginx #获取节点更多信息
删除pod
将创建的测试文件删除
kubectl delete -f pod_nginx_rs.yaml
结束啦 部署结束啦
更多推荐
所有评论(0)