一、初始环境设置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
​
# 关闭selinux
#setenforce 0  # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
​
# 关闭swap
# swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久
​
# 关闭完swap后,一定要重启一下虚拟机!!!
​
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
​
# 在master添加hosts, 此处的 ip 修改成你自己的服务器 ip
cat >> /etc/hosts << EOF
1.2.74.21 k8s-master
1.2.74.24 k8s-node1
1.2.74.90 k8s-node2
EOF
​
​
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
​
sysctl --system  # 生效
​
# 时间同步
# CentOS 7
yum install ntpdate -y
ntpdate time.windows.com
​
# CentOS 8 Stream
yum install -y vim
yum install -y chrony
systemctl start chronyd
systemctl start chronyd
​
## 修改配置文件 
vim /etc/chrony.conf
## pool 2.centos.pool.ntp.org iburst (这一行注释掉,增加以下两行)
server ntp.aliyun.com iburst
server cn.ntp.org.cn iburst
## 重新加载配置
systemctl restart chronyd.service
chronyc sources -v
## 设置时区
timedatectl set-timezone Asia/Shanghai
## 同步 
chronyc -a makestep
## 查看时间
date
​

二、安装(所有节点)

1. Docker 安装

  • CentOS 系统 - yum 安装
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
​
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
​
# PS:如果出现如下错误信息
Loaded plugins: fastestmirror
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
Could not fetch/save url https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#60 - "Peer's Certificate issuer is not recognized."
# 编辑 /etc/yum.conf 文件, 在 [main] 下面添加 sslverify=0 参数
vi /etc/yum.conf
# 配置如下----------------------
[main]
sslverify=0
# -----------------------------
​
# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
​
# Step 4: 开启Docker服务
sudo service docker start
​
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ee.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
​
# K8S v1.23.6 对应兼容docker 版本: `docker-ce-20.10.x` 
# 安装命令
# sudo yum install docker-ce-20.10.6 -y
  • 安装校验
root@iZbp12adskpuoxodbkqzjfZ:$ docker version
​
Client:
 Version:      17.03.0-ce
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
​
Server:
 Version:      17.03.0-ce
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   3a232c8
 Built:        Tue Feb 28 07:52:04 2017
 OS/Arch:      linux/amd64
 Experimental: false

2. Docker 卸载重新安装 ( 当版本安装错误时使用 )

# 删除相关 yum 依赖
yum remove docker-ce docker-ce-cli containerd.io
​
# 删除 docker 相关目录
rm -rf /var/lib/docker
rm -rf /etc/docker
​
# 安装指定版本号
yum install docker-ce-20.10.6
​
# 启用.
systemctl enable docker
sudo systemctl daemon-reload
systemctl start docker
docker version

3. Docker 加速

由于 Docker 默认下载镜像的仓库是在国外的, 因此国内用户访问相对来说会较慢一些, 目前国内一些大公司与学校搭建了一些国内的镜像仓库, 可以让我们在下载镜像时更方便些

阿里云镜像仓库配置

CentOS

针对Docker客户端版本大于 1.10.0 的用户

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
# 此处修改成你自己的加速 url
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["此处修改成你自己的加速 url"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

4. 安装 K8S

添加阿里云 yum 源

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

安装 kubeadm、kubelet、kubectl

# 指定版本
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
​
# 启用
systemctl enable kubelet
​
# 配置关闭 Docker 的 cgroups,修改 /etc/docker/daemon.json  加入以下内容
"exec-opts": ["native.cgroupdriver=systemd"]
​
# 重启 docker
systemctl daemon-reload
systemctl restart docker

三、部署 Kubernetes Maste (Master 节点)

# 在 Master 节点下执行

kubeadm init \
        --kubernetes-version v1.23.6 \
        --image-repository registry.aliyuncs.com/google_containers \
        --service-cidr=10.96.0.0/12 \
        --pod-network-cidr=10.244.0.0/16 \
        --apiserver-advertise-address=1.2.74.21 \
        --v=5
> `apiserver-advertise-address`​ 设置为当前 `Master 节点` 的ip, 如果是云服务器弹性网卡, 需要改成内网ip, 否则api-server 服务会无法启动
​
# 安装成功后,复制如下配置并执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
​
# 如果init失败,使用如下命令进行回退
kubeadm reset -f
rm -rf /etc/kubernetes
rm -rf /var/lib/etcd/
rm -rf $HOME/.kube
​
# 复制以上成功后打印的命令, 在 `node 节点` 的服务器上执行命令, 把node节点加入master节点管理
kubeadm join 1.2.74.21:6443 --token 816l3v.la42j42ewrisjsfs \
        --discovery-token-ca-cert-hash sha256:475ed01a6f6e7d35586d59681214b40000f3d2be7092a73912b282572743fbde
​

四、部署 CNI 网络插件 (Master 节点)

  • 查看组件状态

    kubectl get componentstatus
  • 查看kube-system命名空间的pods

    kubectl get po -n kube-system
    会发现前两个coredns-xxx 未就绪,原因: 网络问题
    NAME                                 READY   STATUS    RESTARTS   AGE
    coredns-6d8c4cb4d-bck7v              0/1     Pending   0          16m
    coredns-6d8c4cb4d-fxx5f              0/1     Pending   0          16m
    etcd-k8s-master                      1/1     Running   0          16m
    kube-apiserver-k8s-master            1/1     Running   0          16m
    kube-controller-manager-k8s-master   1/1     Running   0          16m
    kube-proxy-58h8p                     1/1     Running   0          14m
    kube-proxy-qdxbc                     1/1     Running   0          15m
    kube-proxy-rzvtz                     1/1     Running   0          16m
    kube-scheduler-k8s-master            1/1     Running   0          16m
  • 在 master 节点上执行命令, 下载 calico 配置文件,可能会网络超时

    curl https://docs.projectcalico.org/manifests/calico.yaml -O
    如果超时, 笔者提供该文件外链
    calico.yaml
  • 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 的IP 相同 ( --pod-network-cidr=10.244.0.0/16 )
  • 修改 IP_AUTODETECTION_METHOD 下的网卡名称
  • 删除镜像 docker.io/ 前缀,避免下载过慢导致失败

    sed -i 's#docker.io/##g' calico.yaml
  • 使用k8s 通过 calico.yaml 文件构建应用

    kubectl apply -f  calico.yaml
  • 再次执行命令查看 pods:

    kubectl get po -n kube-system

    以下可看出 STATUS 发生了改变, 过一段时间后就会都成为 Running 状态

    1687960772631.png

  • 如果一直没有变为 Running 状态, 可以执行 kubectl get po <pod_Name> -n kube-system 查看这个 命名空间 的 pods 描述, 如:

    kubectl get po calico-kube-controllers-6fbdddcf6b-ph6jv -n kube-system

    1687961324680.png

    目前为正常信息, 异常需要自己针对日志查看

  • 最后查看 nodes 状态

    kubectl get nodes

    1687961538810.png

五、测试集群服务搭建 (Master 节点)

1. 创建部署 Nginx 服务

kubectl create deployment nginx --image=nginx

1687962038436.png

2. 暴露端口

# 暴露 node 的80端口, 映射到宿主机的随机端口
kubectl expose deployment nginx --port=80 --type=NodePort

1687962101094.png

3. 查看 pod 以及服务信息

kubectl get pod,svc

执行命令后以下 pod 的 80 端口 就映射到了宿主机的 31196 端口

1687962140954.png

4. 访问各个节点的 nginx 服务

  • master:
    1687962426181.png
  • node1:
    1687962385983.png
  • node2:
    1687962474070.png
大功告成!

六、安装命令行工具 (node1 和 node2 节点)

上述是给 master 节点安装了 kubeadm 工具, 使得 master 节点可以使用 kubectl 相关命令

但是我们 切换到 node1/node2 节点 使用命令:

kubectl get nodes

1687963191553.png

此时无法使用相关命令.

以下我们使用另一种 命令行工具node1node2 节点安装

1. 拷贝配置

master 节点/etc/kubernetes/admin.conf 拷贝到需要运行的服务器的 /etc/kubernetes 目录中

# 这里从 master 节点拷贝到 node1 节点, node2 节点也是一样
scp /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes

2. 在对应的服务器上配置环境变量

# 写入环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
​
source ~/.bash_profile

3. 再次执行命令

kubectl get nodes

1687963502162.png

此时 node1 节点 也可以正常执行命令

最后修改:2023 年 06 月 28 日
如果觉得我的文章对你有用,请点个赞吧~