搭建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-
文章内容仅用于作者学习使用,如果内容侵犯您的权益,请立即联系作者删除,作者不承担任何法律责任。