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

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://{myip}:31083

注意:可能有https证书校验拦截的问题,自行baidu跳过即可。

总结

总得来说,使用kubeamd搭建还是比较简单,如果在安装过程中,关注我的公众号,联系我即可。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐