Administrator
Published on 2022-03-04 / 44 Visits
0
0

K8S搭建单机版--番外篇

Centos7.7使用kubeadm快速部署K8s集群(适合新手)
部署环境:

以下实验都是在VM虚拟机中进行部署的,仅供个人学习测试,不建议直接上生产环境.

PS:其中,master的CPU核数至少需要2核,还没有测试过1G内存是否可以正常安装
|节点|系统|CPU核数|内存|磁盘|IP|
|-------|-------|-------|-------|-------|-------|
|k8s-master|Centos7.7minimal|2core|4G|50G|192.168.168.88|
|k8s-node01|Centos7.7minimal|1core|2G|50G|192.168.168.89|
|k8s-node02|Centos7.7minimal|1core|2G|50G|192.168.168.90|

初始化机器部署步骤

※1、三个节点分别执行以下命令
192.168.168.88执行该命令
hostnamectl set-hostname k8s-master
192.168.168.89执行该命令
hostnamectl set-hostname k8s-node01
192.168.168.90执行该命令
hostnamectl set-hostname k8s-node02
※2、三个节点全部执行以下命令
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a                         #关闭swap交换分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab      #禁止swap交换分区开机自启
配置hosts文件(所有主机均要设置)

cat >> /etc/hosts << EOF        
192.168.168.88 k8s-master
192.168.168.89 k8s-node01
192.168.168.90 k8s-node02
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                    #使上一条命令的配置生效
yum install -y ntpdate               #安装ntpdate用于校准时间,确保master和node时间同步
ntpdate time.windows.com           #校准时间
yum install wget -y
如果以下安装docker的方式失败,可以参考我的博客https://www.cnblogs.com/biaopei/p/11937292.html   (所有主机均要设置)

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
#以下命令用来配置镜像地址..
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl enable docker
systemctl start docker
因为默认k8s镜像仓库需要翻出去,所以配置国内镜像地址  (所有主机均要设置)

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#安装k8s 操作命令yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet

以下操作只需要在master中执行

#记得将192.168.168.88修改为master的ip地址,其余不变.需要等待几分钟才可执行完成.会提示[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver.只是警告可忽略.(如果master的cpu核数只有1核,这里还会提示cpu核数达不到要求的2核)
kubeadm init \
--apiserver-advertise-address=192.168.168.88 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
#执行完上一条语句后,会有类似如下命令的提示,根据提示执行即可.还有一条kubeadm join 192.168.2.130:6443 --token,这个是用来在node上执行,加入到k8s集群中的,我们稍后需要用到


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
 以下操作在两个node中执行

#不要直接复制这里的,是kubeadm init执行完成后,后面提示的那条语句.就是我们刚才说的那个

kubeadm join 192.168.168.88:6443 --token yyzsfc.ug0a9jxer6k68nps \
--discovery-token-ca-cert-hash sha256:84b38901334fb08acebed22118706d31cec1764ac91aacaa88f905fba3359208


步骤需在每台node 节点执行  上面的token  , 上面记录的token不准确 请以实际为准

以下操作在master执行

#配置flannel网络  请点击下载下面的kube-flannel.yml 文件上传到服务器

kube-flannel.yml

vi kube-flannel.yml

#修改以下行对应内容,注意不能使用tab键,只能使用空格进行对启,注意格式要按照原来的,不能多一个空格,也不能少一个空格

106  image: lizhenliang/flannel:v0.11.0-amd64

120  image: lizhenliang/flannel:v0.11.0-amd64


kubectl apply -f kube-flannel.yml
ps -ef|grep flannel|grep -v grep                   #可能需要10分钟左右启动初始化完成,才有返回结果.然后再执行下一步
kubectl get nodes                               #可能需要等待十几分钟,状态才能全部转为ready.然后再执行下一步
kubectl get pod -n kube-system                       #可能需要等待十几分钟,直至所有状态才能全部转为ready 1/1.然后再执行下一步


第三方开源管理界面安装

在master节点运行如下语句

kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml 

kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml
使用命令查询

kubectl get pod --all-namespaces

查看kuboard 节点是否Running,全是则安装完成,界面访问为任意node工作节点的IP+32567

示例:http://192.168.168.89:32567




管理员token登入密码获取命令,请在master节点运行

echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)

#配置k8s UI界面  (以下部分为官方文档的管理界面,本文搭建并未使用)

kubernetes-dashboard.yaml

vi kubernetes-dashboard.yaml
#修改以下行对应内容,注意不能使用tab键,只能使用空格进行对启,注意格式要按照原来的,不能多一个空格,也不能少一个空格

................

111    - name: kubernetes-dashboard

112  image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1   #修改此处

............

150  kind: Service
151  apiVersion: v1
152   metadata:
153   labels:
154   k8s-app: kubernetes-dashboard
155   name: kubernetes-dashboard
156   namespace: kube-system
157   spec:
158   type: NodePort                #增加此行
159   ports:
160   - port: 443
161   targetPort: 8443
162   nodePort: 30001             #增加此行
163   selector:
164   k8s-app: kubernetes-dashboard



解决其他浏览器不能访问的问题

cd /etc/kubernetes/pki/
mkdir ui
cp apiserver.crt  ui/
cp apiserver.key  ui/
cd ui/
mv apiserver.crt dashboard.pem
mv  apiserver.key   dashboard-key.pem
kubectl delete secret kubernetes-dashboard-certs -n kube-system
kubectl create secret generic kubernetes-dashboard-certs --from-file=./ -n kube-system






使用  find / -name kubernetes-dashboard.yaml   查找改文件修改  或进入上次上传的路径找到该文件修改



vim kubernetes-dashboard.yaml #回到这个yaml的路径下修改
修改 dashboard-controller.yaml 文件,在args下面增加证书两行
          - --tls-key-file=dashboard-key.pem
          - --tls-cert-file=dashboard.pem


kubectl apply -f kubernetes-dashboard.yaml
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')


kubectl apply -f kubernetes-dashboard.yaml                         #现在我们可以访问https://192.168.168.88:30001.当然也需要等一会.注意是https   记住初次使用只能用火狐浏览器


本文参考自:

https://cloud.tencent.com/developer/article/1509412


Comment