k8s集群搭建

文章目录

  • 前言
  • 一、前置准备
    • 1.1 虚拟机准备
    • 1.2 关闭swap分区
    • 1.3 将桥接的IPv4流量传递到iptables链
    • 1.4 开启ipvs
  • 二、容器化环境和组件安装
    • 2.1 docker安装
    • 2.2 设置docker加速镜像器
    • 2.4 设置yum镜像源
    • 2.5 安装kubeadm、kubelet和kubectl
  • 三、集群搭建
    • 3.1 安装k8s所需镜像
    • 3.2 在hadoop1上部署master节点
    • 3.3 在hadoop2、hadoop3上执行加入集群命令
    • 3.4部署网络插件
    • 3.5 在hadoop1也就是master节点上设置 kube-proxy 的 ipvs 模式
    • 3.6 node节点也能使用kubectl指令
    • 3.7 服务部署
    • 3.8安装自动补全
    • 3.9 安装dashboard
    • 3.10 登录dashboard
  • 四、参考资料
  • 总结


前言

k8s集群搭建


一、前置准备

1.1 虚拟机准备

准备三台虚拟机,我这里准备了三台机器,

主机名 内核版本 系统版本 ip
hadoop1 Linux 3.10.0-1160.el7.x86_64 CentOS Linux release 7.9.2009 (Core) 192.168.184.129
hadoop2 Linux 3.10.0-1160.el7.x86_64 CentOS Linux release 7.9.2009 (Core) 192.168.184.130
hadoop3 Linux 3.10.0-1160.el7.x86_64 CentOS Linux release 7.9.2009 (Core) 192.168.184.131

机器之间可以免密登录,关闭防火墙,还有时间同步做好,关闭swap分区。

1.2 关闭swap分区

1.关闭swap分区
swapoff -a
2.修改 Swappiness
sudo vim /etc/fstab
注释掉以下这行
#/dev/sda2    none   swap   sw   0   0
4.使配置生效,不用重启
sysctl -p   

1.3 将桥接的IPv4流量传递到iptables链

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

#加载br_netfilter模块
modprobe br_netfilter

#查看是否加载
lsmod | grep br_netfilter

#使生效
sysctl --system

#拓展:持久化修改(保留配置包本地文件,重启系统或服务进程仍然有效)
sysctl -p

1.4 开启ipvs

#在三台机器安装 ipset 和 ipvsadm :
yum -y install ipset ipvsadm

#在三台机器执行如下脚本:
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

#授权、运行、检查是否加载:
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

二、容器化环境和组件安装

2.1 docker安装

代码如下(示例):

#卸载旧版本docker(如有)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# yum安装 gcc 相关软件,安装yum工具包
yum -y install gcc gcc-c++
yum -y install yum-utils

#设置阿里云的stable 镜像仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新 yum 软件包索引
yum makecache fast

#安装指定版本的 Docker(v20.10.8:
yum -y install docker-ce-3:20.10.8-3.el7.x86_64 docker-ce-cli-1:20.10.8-3.el7.x86_64 containerd.io

#启动docker并设置开机自启
systemctl start docker
systemctl enable docker

#验证 Docker 是否安装成功:
systemctl status docker
docker -v

2.2 设置docker加速镜像器

mkdir -p /etc/docker

#配置阿里云镜像加速:
tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],	
  "registry-mirrors": [
    "https://du3ia00u.mirror.aliyuncs.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://registry.docker-cn.com"
  ],
  "live-restore": true,
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5,
  "storage-driver": "overlay2"
}
EOF

#使之生效并重启docker
systemctl daemon-reload
systemctl restart docker

2.4 设置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=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

#清除缓存并更新软件包列表
yum clean all
yum makecache
yum list

2.5 安装kubeadm、kubelet和kubectl

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10

#查看安装版本:
kubelet --version

为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,修改"/etc/sysconfig/kubelet"文件为以下内容:

vi /etc/sysconfig/kubelet

# 修改为
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

三、集群搭建

3.1 安装k8s所需镜像

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.0

3.2 在hadoop1上部署master节点

kubeadm init \
  --apiserver-advertise-address=192.168.184.129 \
  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
  --kubernetes-version=v1.21.10 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

说明
apiserver-advertise-address =Master节点的 IP 地址。
image-repository=容器镜像的仓库地址。
kubernetes-version= 安装的kubernetes版本号。
service-cidr 和 apiserver-advertise-address 、pod-network-cidr 不能在同一个网络范围内。
不要使用 172.17.0.1/16 网段范围,因为这是 Docker 默认使用的。

.拷贝kubectl使用的连接k8s认证文件到默认路径,根据日志提示,想要开始使用集群,需要在 master节点机器上(192.168.184.129 )执行如下命令在这里插入代码片

#创建目录存放 Kubernetes 的配置文件并配置 Kubernetes 客户端工具 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

#将 $HOME/.kube/config 文件的权限修改为当前用户
chown $(id -u):$(id -g) $HOME/.kube/config

# 如果是 root 用户,可以执行如下命令,在使用 kubectl 命令时就不需要每次都指定配置文件的路径
export KUBECONFIG=/etc/kubernetes/admin.conf

生成token并且加入集群

#生成token,有效期2小时
kubeadm token create --print-join-command

# 生成一个永不过期的token
kubeadm token create --ttl 0 --print-join-command

#此时系统自动生成了一个kubeadm join命令,这个命令是用来将一个新的节点加入到 Kubernetes 集群中的。说明:
kubeadm join 192.168.79.101:6443    ----集群的 API Server 地址
  --token y1aqpl.ktwweub0h338qh46   ----用来认证新节点的凭证
  --discovery-token-ca-cert-hash sha256:dca999e4b0fdd14b7e92a6ed3cd1fbfedad273ba409e0bc5a76ebc947bd1f3b2

使用永久token生成的指令如下

在这里插入图片描述

3.3 在hadoop2、hadoop3上执行加入集群命令

kubeadm join 192.168.184.129:6443  --token fuxv3x.x7wqzybg7bb9kzis --discovery-token-ca-cert-hash sha256:48b064411c32aa2b7b7291d27351dbd871c5c21ed569167f0d8901b4c6c1af72

k8s集群搭建_第1张图片

3.4部署网络插件

Kubernetes 支持多种网络插件,比如 flannel、calico、canal 等,任选一种安装即可,这里选择 calico。在 master节点(192.168.184.129 )上执行

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

查看安装进度

kubectl get pods -n kube-system
#或者
watch kubectl get pods -n kube-system

k8s集群搭建_第2张图片
状态都是ready安装成功。
此时查看节点状态都是安装好了。

kubectl get nodes

k8s集群搭建_第3张图片

3.5 在hadoop1也就是master节点上设置 kube-proxy 的 ipvs 模式

kubectl edit cm kube-proxy -n kube-system

找到ipvs模块,将 mode: " " 双引号里面加上ipvs。
k8s集群搭建_第4张图片

删除 kube-proxy ,让 Kubernetes 集群自动创建新的 kube-proxy

kubectl delete pod -l k8s-app=kube-proxy -n kube-system

3.6 node节点也能使用kubectl指令

在hadoop2、hadoop3上执行以下指令

mkdir -pv ~/.kube
touch ~/.kube/config

在hadoop1上拷贝配置文件到hadoop2、hadoop3

scp /etc/kubernetes/admin.conf root@hadoop2:~/.kube/config
scp /etc/kubernetes/admin.conf root@hadoop3:~/.kube/config

使用kubectl指令查看是否配置成功

kubectl get nodes

k8s集群搭建_第5张图片

3.7 服务部署

1.部署nginx

kubectl create deployment nginx --image=nginx:1.14-alpine

2.暴露端口

kubectl expose deployment nginx --port=80 --type=NodePort
  1. 查看服务状态
kubectl get pods,svc

3.8安装自动补全

# 安装bash
yum -y install bash-completion

# 自动补全 
echo 'source <(kubectl completion bash)' >>~/.bashrc 
kubectl completion bash >/etc/bash_completion.d/kubectl
# 全局
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
source /usr/share/bash-completion/bash_completion

3.9 安装dashboard

1.设置域名映射

sudo bash -c 'echo "151.101.64.133 raw.githubusercontent.com" >> /etc/hosts'

2.获取文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

3.构建pod

kubectl apply -f recommended.yaml

k8s集群搭建_第6张图片
4.查看pod状态

kubectl get pods --all-namespaces | grep dashboard

  1. 删除现有的 dashboard 服务
#查看所有命名空间namespace
kubectl get svc --all-namespaces

#删除现有dashboard服务
kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

3.10 登录dashboard

1.创建一个nodePort类型的kubernetes-dashboard。进入/etc/kubernetes 目录下创建配置文件dashboard-svc.yaml

cd /etc/kubernetes
vi /etc/kubernetes/dashboard-svc.yaml

2.yaml文件,

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

3.创建服务

kubectl apply -f dashboard-svc.yaml

4.查看服务

kubectl get svc --all-namespaces
  1. 创建 kubernetes-dashboard 管理员角色,在/etc/kubernetes 目录下创建配置文件dashboard-svc-account.yaml,其内容如下
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io

6.使文件生效

kubectl apply -f dashboard-svc-account.yaml

7.获取token

kubectl get secret -n kube-system |grep admin|awk '{print $1}'

#系统返回dashboard-admin-token-bvhwm,查看token
kubectl describe secret dashboard-admin-token-bvhwm -n kube-system|grep '^token'|awk '{print $2}'
8 查看外部访问端口

```java
kubectl get svc --all-namespaces | grep dashboard

在这里插入图片描述
9.得到地址为
https://192.168.184.129:32696/
在页面空白处直接键盘输入,thisisunsafe 才能访问,否则访问不了
k8s集群搭建_第7张图片
输入刚刚获取的token进入管理页面
k8s集群搭建_第8张图片

四、参考资料

K8s集群搭建教程

总结

参考了该博客自己操作了一遍以及遇到的问题解决。

你可能感兴趣的:(k8s,kubernetes,容器,云原生)