一、环境配置(三台主机都需要配置)

修改ip地址和主机名

node1的主机名修改 node2和master都按这种来设置

[root@web02 ~]# hostnamectl set-hostname node1 && bash
[root@node1 ~]# hostname
node1
[root@node1 ~]# 

主机主机名
192.168.58.12node1
192.168.58.13node2
192.168.58.11master

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

结束啦 部署结束啦 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐