k8s集群环境搭建
k8s集群搭建
前言
今天我们来使用kubeamd方式搭建一下k8s集群,为后面我们要写的微服务项目做个环境准备工作,首先我们看下
搭建步骤
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
修改selinux
setenforce 0 临时
sed -i 's/enforcing/disabled/' /etc/sysconfig/selinux ##修改配置文件
关闭swap
swapoff -a ##临时
vi /etc/fstab ##永久
sed -i '/swap/d' /etc/fstab ##删除配置文件 swap 字样的
sed -ri 's/.*swap.*/#&/' /etc/fstab ##注释永久
修改主机名
hostname set-homename <主机名> ##注意:购买的云服务器不需要修改这个
## master节点
hostnamectl set-hostname k8s-master
## node节点
hostnamectl set-hostname k8s-node1
master host配置
cat >> /etc/hosts << EOF
<master节点ip> k8s-master k8s-master
<node1节点ip> k8s-node1
<node2节点ip> k8s-node2
<node3节点ip> k8s-node3
EOF
k8s.conf文件配置
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system ##刷新生效
echo 1 > /proc/sys/net/ipv4/ip_forward 路由转发 将0 修改为1
cat /proc/sys/net/ipv4/ip_forward
时间同步
master、 node1 node2 node3 机器 安装 时间更新服务
yum -y install ntpdate -y
ntpdate time.windows.com ##时间同步
市区不对问题
export TZ='Asia/Shanghai' ##更改为上海时间
所有节点(master、node)安装 docker kubeadm kubelet
yum install wget ##安装wget(如果系统自带忽略这一步)
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.x86_64 --skip-broken ##安装docker环境
systemctl enable docker && systemctl start docker ##启用并启动docker
docker --version ##查看docker版本
##配置docker镜像仓库地址
cat > /etc/docker/daemo.json << EOF
{
"registry-mirrors": [
"https://kfwkfulq.mirror.aliyuncs.com",
"https://2lqq34jg.mirror.aliyuncs.com",
"https://pee6w651.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
EOF
systemctl restart docker ##全部重启docker
添加阿里云 YUM 软件源
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装 kubeadm、kubelet 和 kubectl
下载指定版本
yum -y install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
启用kubelet
systemctl enable kubelet
部署Kubernetes Master
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.0 --pod-network-cidr=10.244.0.0/16
join token过期问题
如果遇到join token过期可重新生成
kubeadm token create --print-join-command
![](https://qiniu-cdn.janker.top/oneblog/20220103213950876.png)
node节点加入
以上k8s基础环境部分的内容,maser节点与node节点基本相同,唯一不同的部分就是master需要kubeadm init,而node阶段需要kubeadm join。
在node节点机器执行如下命令:
kubeadm join 172.17.xx.xxx:6443 --token wevva0.ln5ovpyphbatcki9 --discovery-token-ca-cert-hash sha256:xxxxxxxxx
注意: --pod-network-cidr=10.244.0.0/16 是为了后面安装CNI网络插件flaannel做准备。
执行反馈的这段信息,详细最好复制反馈信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
其他相关命令
kubectl get nodes ##查看node节点状态
添加node节点后查询结果如下:
部署CNI网络插件
本次采用的CNI网络插件为flannel其他的这边就不多说,如果有需要自行改变即可,难度不大。
master节点上下载kube-flannel.yml
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署网络插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
查看插件安装后 节点使用状态
kubectl get pods -n kube-system
测试kubernetes 集群
在kubernetes 集群创建一个pod 验证是否正常运行
kubectl create deployment nginx --image=nginx #####创建nginx pod 节点
kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service ###对于外暴露端口
kubectl expose deployment tomcat --port=80 --type=NodePort
kubectl expose rc nginx --port=80 --target-port=8000
kubectl get pod,svc
创建完成后可使用 nodeip 显示反馈暴露端口通过测试访问 nginx 页面。
安装dashboard
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
# 创建 pod
kubectl apply -f recommended.yaml
查看,成功创建
kubectl get pods --all-namespaces
删除现有的dashboard服务,dashboard 服务的 namespace 是kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过浏览器访问,因此需要改成NodePort型的
# 删除
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard
创建配置文件
vi dashboard-svc.yaml
# 内容
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 8443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
# 执行
kubectl apply -f dashboard-svc.yaml
再次查看服务,成功
kubectl get pods --all-namespaces
想要访问dashboard服务,就要有访问权限,创建kubernetes-dashboard管理员角色
vi dashboard-svc-account.yaml
# 内容
apiVersion: v1
kind: ServiceAccount
metadata:
name: dashboard-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: dashboard-admin
subjects:
- kind: ServiceAccount
name: dashboard-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
# 执行
kubectl apply -f dashboard-svc-account.yaml
获取 token
kubectl get secret -n kube-system |grep admin|awk '{print $1}'
kubectl describe secret dashboard-admin-token-dtp5d -n kube-system|grep '^token'|awk '{print $2}'
然后就会获得一串token
查看端口,你就能看到对外的地址为:31083。注意:这个端口是随机的,每个人的执行结果可能不太一样。
kubectl get svc --all-namespaces
![](https://qiniu-cdn.janker.top/oneblog/20220103214043957.png)
访问
https://{myip}:31083
注意:可能有https证书校验拦截的问题,自行baidu跳过即可。
总结
总得来说,使用kubeamd搭建还是比较简单,如果在安装过程中,关注我的公众号,联系我即可。
![](https://qiniu-cdn.janker.top/oneblog/20220103214503494.png)