Kubernetes部署
Kubernetes部署
【实验要求】
Kubernetes部署。
【前置准备】
要求实验主机能够连接外网,并关闭防火墙和selinux,各主机信息如表14-1所示:
表14-1
主机名 |
IP地址 |
角色 |
master |
192.168.127.42/24 |
管理节点 |
node1 |
192.168.127.43/24 |
工作节点 |
node2 |
192.168.127.44/24 |
工作节点 |
【实验步骤】
步骤1:环境设置,所有节点均需操作。
(1)设置主机名,设置管理节点的主机名为master。
[root@localhost ~]# hostnamectl set-hostname master
设置工作节点的主机名分别为node1和node2。
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2
(2)编辑/etc/hosts文件,添加域名解析。
[root@master ~]# vi /etc/hosts
添加以下内容。
192.168.127.42 master
192.168.127.43 node1
192.168.127.44 node2
将/etc/hosts复制到node1和node2节点。
[root@master ~]# scp /etc/hosts root@192.168.127.43:/etc/hosts
[root@master ~]# scp /etc/hosts root@192.168.127.44:/etc/hosts
(3)在所有节点上均关闭swap,并且配置系统内核参数,使流过网桥的流量也进入IPTables/Netfilter框架。
# swapoff -a
# sed -i 's/.*swap.*/#&/' /etc/fstab
# echo -e 'net.bridge.bridge-nf-call-iptables = 1 \nnet.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
(4)在所有节点安装基本软件包,要求虚拟主机能够访问外网。
# yum -y install wget ntpdate git
(5)配置时间同步,可以选用公网NTPD服务器或者自建NTPD服务,本任务使用阿里云的时间服务器。
# ntpdate ntp1.aliyun.com
也可将其直接写到crontab中。
# crontab -e
添加如下内容后,保存并退出文件。
*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
# systemctl restart crond.service
重启系统。
#reboot
步骤2:配置yum源及下载Kubernetes相关软件包,所有节点均需操作。
(1) 配置yum、epel、Kubernetes和Docker源。
yum -y remove docker-ce
# cd /etc/yum.repos.d
# rm -f CentOS-*
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
# vi /etc/yum.repos.d/kubernetes.repo
// 添加如下内容
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
// 保存并退出文件
# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# rpm -import rpm-package-key.gpg // 安装key文件
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum clean all
# yum makecache fast
# cd // 返回到家目录
(2) 在所有节点上安装docker-ce,无已安装docker-ce,此步骤可以跳过。
[root@master ~]# yum -y install docker-ce
[root@node1 ~]# yum -y install docker-ce
[root@node2 ~]# yum -y install docker-ce
在所有节点上启动docker服务。
[root@master ~]# systemctl start docker
[root@node1 ~]# systemctl start docker
[root@node2 ~]# systemctl start docker
在所有节点上配置Docker的镜像加速器,使用阿里云的加速器。
// 在master节点上配置镜像加速器
[root@master ~]# vi /etc/docker/daemon.json
// 添加如下内容
{
"registry-mirrors": ["https://x3nqjrcg.mirror.aliyuncs.com"]
}
// 在node1节点上配置镜像加速器
[root@node1 ~]# vi /etc/docker/daemon.json
// 添加如下内容
{
"registry-mirrors": ["https://x3nqjrcg.mirror.aliyuncs.com"]
}
// 在node2节点上配置镜像加速器
[root@node2 ~]# vi /etc/docker/daemon.json
// 添加如下内容
{
"registry-mirrors": ["https://x3nqjrcg.mirror.aliyuncs.com"]
}
在所在节点上重启docker服务,并设置开机自启。
// 在master节点上执行
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker
// 在node1节点上执行
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart docker
[root@node1 ~]# systemctl enable docker
// 在node1节点上执行
[root@node2 ~]# systemctl daemon-reload
[root@node2 ~]# systemctl restart docker
[root@node2 ~]# systemctl enable docker
(3) 在所有节点上安装kubeadm、kubectl、kubelet,版本号选用v1.14.2。
# yum -y install kubectl-1.14.2 kubeadm-1.14.2 kubelet-1.14.2 kubernetes-cni-0.7.5
在所有节点上启动kubelet服务,并设置为开机自启。
# systemctl start kubelet
# systemctl enable kubelet
步骤3:配置Kubernetes集群。
(1)在master节点上编写脚本,下载建立集群时所需的镜像。
[root@master ~]# vi dockerimages.sh
// 添加如下内容
images=(kube-apiserver:v1.14.2
kube-controller-manager:v1.14.2
kube-scheduler:v1.14.2
kube-proxy:v1.14.2
pause:3.1
etcd:3.3.10)
for imageName in ${images[@]} ; do
docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
done
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1
// 保存并退出文件
[root@master ~]# sh dockerimages.sh // 运行脚本,下载所需镜像
在master节点上将脚本文件复制到node1和node2节点。
[root@master ~]#scp dockerimages.sh root@192.168.127.43:/root/
The authenticity of host '192.168.5.101 (192.168.5.101)' can't be established.
ECDSA key fingerprint is a7:e5:89:04:88:2d:05:b6:3b:8a:9c:14:55:d9:f7:21.
Are you sure you want to continue connecting (yes/no)? yes //输入yes
Warning: Permanently added '192.168.5.101' (ECDSA) to the list of known hosts.
root@192.168.5.101's password: // 输入密码
dockerimages.sh 100% 516 0.5KB/s 00:00
[root@master ~]#scp dockerimages.sh root@192.168.127.44:/root/
The authenticity of host '192.168.5.102 (192.168.5.102)' can't be established.
ECDSA key fingerprint is b8:7c:55:ca:ca:5f:bf:17:23:6c:70:b8:b9:6e:c4:d9.
Are you sure you want to continue connecting (yes/no)? yes //输入yes
Warning: Permanently added '192.168.5.102' (ECDSA) to the list of known hosts.
root@192.168.5.102's password: //输入密码
dockerimages.sh 100% 516 0.5KB/s 00:00
在node1和node2节点上执行脚本文件dockerimages.sh。
[root@node1 ~]# sh dockerimages.sh
[root@node2 ~]# sh dockerimages.sh
(2) 初始化Kubernetes集群,此操作仅需在master节点上执行。
[root@master ~]# kubeadm init --kubernetes-version=v1.14.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address 192.168.127.42
……
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.5.100:6443 --token bdettv.jqzgz1wwg858faw2 \
--discovery-token-ca-cert-hash sha256:b6f96b551ece10cd43ef330187c12c8dc6e6103091aa22689a88a0f62eddb342
将有关kubeadm join命令内容保存下来,后面的node节点加入到集群中时需要用到此命令。
kubeadm join 192.168.127.42:6443 --token af4x15.qhc0dfddunilds4d \
--discovery-token-ca-cert-hash sha256:bb121dcfc63adb7f3a3e5ac4016ed4bdda8529b6ddb5bf076657f90df0c1d796
(3) 配置环境变量,此操作仅需在master节点上执行。
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看集群状态。
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady master 1m v1.10.0
可以看到集群状态为未就绪(NotReady),其原因是因为网络还未进行配置。
(4)安装Flannel网络,仅需在master节点上配置。
Flannel网络需要使用quay.io/coreos/flannel:v0.12.0-amd64,但由于quay.io网站目前国内无法访问,因此需下载flannel:v0.12.0-amd64导入到docker中
[root@master ~]# wget https://github.com/coreos/flannel/releases/download/v0.12.0/flanneld-v0.12.0-amd64.docker
[root@master ~]# docker load < flanneld-v0.12.0-amd64.docker
256a7af3acb1: Loading layer [==================================================>] 5.844MB/5.844MB
d572e5d9d39b: Loading layer [==================================================>] 10.37MB/10.37MB
57c10be5852f: Loading layer [==================================================>] 2.249MB/2.249MB
7412f8eefb77: Loading layer [==================================================>] 35.26MB/35.26MB
05116c9ff7bf: Loading layer [==================================================>] 5.12kB/5.12kB
Loaded image: quay.io/coreos/flannel:v0.12.0-amd64
修改内核参数,将桥接的IPv4的流量转发给IPTables链。本实验利用wget命令下载所需的kube-flannel.yml文件,并应用该文件。
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@master ~]# kubectl apply -f kube-flannel.yml
podsecuritypolicy.policy "psp.flannel.unprivileged" created
clusterrole.rbac.authorization.k8s.io "flannel" created
clusterrolebinding.rbac.authorization.k8s.io "flannel" created
serviceaccount "flannel" created
configmap "kube-flannel-cfg" created
daemonset.apps "kube-flannel-ds-amd64" created
daemonset.apps "kube-flannel-ds-arm64" created
daemonset.apps "kube-flannel-ds-arm" created
daemonset.apps "kube-flannel-ds-ppc64le" created
daemonset.apps "kube-flannel-ds-s390x" created
安装完成后,需要等待一会儿再查看集群状态,等待时间视系统配置而定。
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 25m v1.14.2
(5)将其他节点加入到集群中,仅需在node节点上执行。
在master节点上将flanneld-v0.12.0-amd64.docker文件复制到node1和node2节点上。
[root@master ~]# scp flanneld-v0.12.0-amd64.docker root@192.168.5.101:/root/
root@192.168.5.101's password: //输入node2节点root用户的登录密码
flanneld-v0.12.0-amd64.docker 100% 51MB 119.9MB/s 00:00
[root@master ~]# scp flanneld-v0.12.0-amd64.docker root@192.168.5.102:/root/
root@192.168.5.102's password: // 输入node2节点root用户的登录密码
flanneld-v0.12.0-amd64.docker 100% 51MB 107.2MB/s 00:00
在node1节点上执行操作。
[root@node1 ~]# docker load < flanneld-v0.12.0-amd64.docker
[root@node1 ~]# kubeadm join 192.168.5.100:6443 --token bdettv.jqzgz1wwg858faw2 --discovery-token-ca-cert-hash sha256:b6f96b551ece10cd43ef330187c12c8dc6e6103091aa22689a88a0f62eddb342
在node2节点上执行操作。
[root@node2 ~]# docker load < flanneld-v0.12.0-amd64.docker
[root@node1 ~]# kubeadm join 192.168.5.100:6443 --token bdettv.jqzgz1wwg858faw2 --discovery-token-ca-cert-hash sha256:b6f96b551ece10cd43ef330187c12c8dc6e6103091aa22689a88a0f62eddb342
在node1和node2节点上执行命令后,如看到以下提示,则表明节点成功加入了集群。
This node has joined the cluster: // 节点成功加入到集群中
* Certificate signing request was sent to master and a response
was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.
在master节点上查看加入节点的状态。
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 21m v1.14.2
node1 Ready <none> 5m54s v1.14.2
node2 Ready <none> 5m49s v1.14.2
也可利用kubectl get cs命令查看集群的状态。
[root@master ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?