搭建Kubernetes实验环境

搭建Kubernetes环境

三台Centos7虚拟机,2核8G 40G磁盘空间

主机名 IP地址
k8s-master 192.168.122.115
k8s-node1 192.168.122.200
k8s-node2 192.168.122.139

Docker安装(三个节点都执行)

去官网查看安装文档,根据文档内容进行安装Docker

yum install yum-utils device-mapper-persistent-data lvm2 -y #安装必备的软件包
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #添加Docker软件源
yum -y install docker-ce-18.06.2.ce #安装指定版本的Docker
systemctl start docker #开启docker
systemctl enable docker #设置docker为开机自启动
systemctl status docker  #查看docker运行状态
#如果显示Active:active(running)即为安装成功
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s   http://f1361db2.m.daocloud.io #更换Docker镜像源地址,加快镜像下载速度
yum -y install bash-completion  #安装Docker命令补全功能
source /usr/share/bash-completion/bash_completion  #让Docker命令补全功能生效
systemctl daemon-reload #重载docker配置
systemctl restart docker #重启docker

三个节点初始化(三节点都执行)

设置三台主机名

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl set-hostname k8s-node2

配置主机映射

cat <<EOF >> /etc/hosts
192.168.122.115 k8s-master
192.168.122.200 k8s-node1
192.168.122.139 k8s-node2
EOF

关闭防火墙(实验环境关闭,生产环境请放行)

systemctl stop firewalld  #关闭防火墙
systemctl disable firewalld #关闭防火墙开机自启

关闭swap(kubernetes不支持swap)

swapoff -a  #关闭所有交换空间
sed -i 's/.*swap.*/#&/' /etc/fstab

加载网桥防火墙

透明防火墙(Transparent Firewall)又称桥接模式防火墙(Bridge Firewall)。简单来说,就是在网桥设备上加入防火墙功能。透明防火墙具有部署能力强、隐蔽性好、安全性高的优点。

modprobe br_netfilter

永久修改内核参数(优化内核)

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

加载内核配置

sysctl -p /etc/sysctl.d/k8s.conf

查看是否生成相关文件

ls /proc/sys/net/bridge

添加Kubernetes的华为yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装依赖包以及相关工具

yum -y install epel-release
yum -y install  net-tools conntrack-tools wget vim  ntpdate libseccomp libtool-ltdl tree unzip

下载k8s相关软件包

cd /root
wget https://obs-k8s.obs.cn-north-4.myhuaweicloud.com/K8s.zip
unzip K8s.zip

编辑下载k8s镜像的脚本(官方镜像在国外,可以通过国内下载)

cd ~
vim pushimages.sh

添加如下内容

#!/bin/bash

images=(
kube-apiserver:v1.14.1
kube-controller-manager:v1.14.1
kube-scheduler:v1.14.1
kube-proxy:v1.14.1
pause:3.1
etcd:3.3.10
coredns:1.3.1
flannel:v0.11.0-amd64
kibana-oss:v6.6.1
)

a=0
for imageName in ${images[@]} ; do
docker pull oceancloud/$imageName
let a++
if [ "$a" -e 9 ] ; then
docker tag oceancloud/$imageName docker.elastic.co/kibana/kibana-oss:6.6.1 
elif [ "$a" -e 8 ] ; then
docker tag oceancloud/$imageName quay.io/coreos/$imageName
else
docker tag oceancloud/$imageName k8s.gcr.io/$imageName
fi
done

保存后执行该脚本

chmod +x pullimages.sh #增加执行权限
./pullimages.sh   #开始执行

在K8s-master节点搭建nfs server(所有节点)

yum install -y nfs-utils rpcbind #安装nfs软件包
mkdir /home/nfs  #创建空文件夹(仅k8s节点)

配置nfs配置文件(仅在k8s-master节点执行)

cat <<EOF > /etc/exports
/home/nfs/ * (rw,sync,no_hide,no_all_squash)
EOF

开启nfs相关服务并设置为开机启动(在所有节点执行)

systemctl start nfs

systemctl enable nfs

systemctl start rpcbind

systemctl enable rpcbind

**k8s-ndoe1-2使用showmout命令查看可挂载节点


安装kubelet、kubeadm、kubectl(三节点安装)

节点安装kubelet、kubeadm、kubectl

yum -y install kubelet-1.14.1-0.x86_64
yum -y install kubeadm-1.14.1-0.x86_64
yum -y install kubectl-1.14.1-0.x86_64
systemctl enable kubelet                #设置kubelet开机自启动

添加Kubernetes命令补全功能(在K8s-master节点执行)

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)        
echo "source <(kubectl completion bash)" >> ~/.bashrc

初始化k8s-master节点

查看相关镜像是否下载完整

kubeadm config images list

用kubeadmin初始化k8s-master节点

kubeadm init --pod-network-cidr=10.244.0.0/16  | tee $HOME/k8s.abt

注:–pod-network参数后跟地址段可自己指定,但是注意需要跟后面部署flannel网络时候保持一致,此处10.244.0.0/16为默认地址段。

初始化成功后回显如下。记录红色加粗自体部分的回显,后续步骤将使用该部分数据

Your Kubernetes k8s-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

Then 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/

kubeadm join 192.168.122.115:6443 --token 2ldo2j.uadaqpmyyzn5l2i2 \
    --discovery-token-ca-cert-hash sha256:a2b4a543418be203b9a7680ba0ae86b149cbf82497ece08fe5745d2e78a65f6a 

输入以下命令授权非root用户使用kubectl命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果初始化失败还可以还原

kubeadm reset -f

部署flannel网络(仅在k8s-master节点上运行)

查看node状态,可以看到此时master状态仍然为NotReady

kubectl get node 

查看pod状态

kubectl get pods --namespace=kube-system

部署flannel

kubectl apply -f /root/UAT/kube-flannel.yml

再查看node和pod状态,若正常则单节点k8s-master安装成功。


将其它节点加入k8s-master中组成集群

在k8s-node1和k8s-node2上分别运行初始化k8s-master之后的回显

kubeadm join 192.168.122.115:6443 --token teq2pv.f34xghxbexoun5rf \
--discovery-token-ca-cert-hash sha256:edca62f5952c998dafc7d53c6564ca4fd770c09a0443b3053aca74da597be906

查看Node状态

kubectl get node 

部署dashboard(在k8s-master节点执行)

创建pod部署dashboard

kubectl apply -f /root/UAT/dashboard.yaml
kubectl apply -f /root/UAT/kube-dashboard-access.yaml

查看dashboard的pod状态

kubectl get pods --namespace=kube-system

验证dashboard是否安装成功

使用192.168.122.115:30090访问dashboard


部署Helm包管理工具

安装helm命令行工具(在k8s-master节点执行)

cd /root/UAT
tar -zxvf helm-v2.11.0-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/

API Server开启了RBAC,使用rbac-config.yaml部署

kubectl create -f /root/UAT/rbac-config.yaml

分别在两个node拉取Tiller镜像,并修改tag(分别在k8s-node1和k8s-node2上进行该操作)

docker pull oceancloud/tiller:v2.11.0
docker tag oceancloud/tiller:v2.11.0 gcr.io/kubernetes-helm/tiller:v2.11.0

使用之前创建好的serviceaccount账号安装Tiller

helm init --service-account tiller --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

检验Tiller安装结果

helm version


部署EFK(k8s-master节点执行)

解压配置文件安装包

cd /root/UAT
tar -xvzf EFK.tar.gz
# 进入解压后的目录
cd EFK
# 查看文件夹下的相关内容
ls
# 回显如下
es-deployment.yaml           # Elasticsearch控制器yaml文件
es-service.yaml                # Elasticsearch service对象yaml文件
fluentd-es-configmap.yaml     # fluentd配置yaml文件
fluentd-es-ds.yaml             # fluentd daemonset yaml文件
kibana-deployment.yaml       # kibana 控制器yaml文件
kibana-service.yaml            # kibana service对象yaml文件

部署EFK(当看到有容器在创建后,稍等一会再继续执行)

kubectl apply -f es-deployment.yaml
kubectl apply -f es-service.yaml
kubectl apply -f fluentd-es-configmap.yaml
kubectl apply -f fluentd-es-ds.yaml
kubectl apply -f kibana-deployment.yaml
kubectl apply -f kibana-service.yaml

查看相应组件是否运行正常

kubectl get pods -n kube-system

查看对应服务暴露的svc

kubectl get svc -n kube-system

打开网页访问进行验证

打开kibana页面验证


Prometheus(k8s-master节点执行)

解压配置文件安装包

cd /root/UAT
tar -xvzf prometheus.tar.gz
# 进入解压后的目录
cd prometheus
# 查看文件夹下的相关内容
ls
# 回显
configmap.yaml              # Prometheus 配置yaml文件
grafana-deploy.yaml         # grafana 控制器yaml文件
grafana-svc.yaml            # grafana service yaml文件
node-exporter.yaml         # node-exporter控制器 yaml文件
prometheus.svc.yml         # Prometheus service yaml文件
prometheus.yaml            # Prometheus 控制器yaml文件
rbac-setup.yaml             # 认证鉴权相关yaml文件

创建名为monitor的namespace,后续部署的对象都在该namespace中

kubectl create namespace monitor

部署Prometheus

kubectl apply -f configmap.yaml 
kubectl apply -f grafana-deploy.yaml 
kubectl apply -f grafana-svc.yaml 
kubectl apply -f node-exporter.yaml 
kubectl apply -f prometheus.svc.yml 
kubectl apply -f prometheus.yaml
kubectl apply -f rbac-setup.yaml

查看对应组件是否运行正常

kubectl get pods -n monitor

查看grafana通过Nodeport暴露出的端口号

Kubectl get svc –n monitor

访问grafana页面

访问Prometheus页面

去除master节点的taint(k8s-master节点执行)

kubectl taint node k8s-master node-role.kubernetes.io/master-

文章内容仅用于作者学习使用,如果内容侵犯您的权益,请立即联系作者删除,作者不承担任何法律责任。

×

喜欢就点赞,疼爱就打赏