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"}

 

posted @   YJinHAI  阅读(207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示