一、初始环境设置
# 关闭防火墙
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
命名空间的podskubectl 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
状态如果一直没有变为
Running
状态, 可以执行kubectl get po <pod_Name> -n kube-system
查看这个命名空间
的 pods 描述, 如:kubectl get po calico-kube-controllers-6fbdddcf6b-ph6jv -n kube-system
目前为正常信息, 异常需要自己针对日志查看
最后查看 nodes 状态
kubectl get nodes
五、测试集群服务搭建 (Master 节点)
1. 创建部署 Nginx 服务
kubectl create deployment nginx --image=nginx
2. 暴露端口
# 暴露 node 的80端口, 映射到宿主机的随机端口
kubectl expose deployment nginx --port=80 --type=NodePort
3. 查看 pod 以及服务信息
kubectl get pod,svc
执行命令后以下 pod 的 80 端口
就映射到了宿主机的 31196 端口
4. 访问各个节点的 nginx 服务
- master:
- node1:
- node2:
大功告成!
六、安装命令行工具 (node1 和 node2 节点)
上述是给 master
节点安装了 kubeadm
工具, 使得 master
节点可以使用 kubectl
相关命令
但是我们 切换到 node1/node2
节点 使用命令:
kubectl get nodes
此时无法使用相关命令.
以下我们使用另一种 命令行工具
给 node1
和 node2
节点安装
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
此时 node1 节点
也可以正常执行命令