我是靠谱客的博主 无奈鸵鸟,最近开发中收集的这篇文章主要介绍kubernetes单master集群搭建,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

目录

1.环境准备

2.准备工作

2.1 同步所有节点时间

2.2 修改主机名

2.3 配置域名解析

2.4 安装必要的rpm软件

2.5 关闭防火墙

2.6 关闭selinux

2.7 禁用交换分区

2.8 配置网络桥接与路由转发

2.9 配置yum源

2.10 安装docker

3.安装 kubernetes

3.1 添加 Kubernetes 阿里云 yum 源

3.2 安装 kubeadm、kubelet 和 kubectl

3.3 初始化

3.4 安装pod网络附加组件

3.5 加入工作节点

3.6 集群扩容增加node节点

3.7 测试 kubernetes 集群

4.部署Web UI界面(dashboard)

5.安装Heapster


1.环境准备

  • 一台或多台机器,配置(最低)2核2G

主机名

IP 地址

操作系统

主机角色

master

192.168.6.86

CentOS 7.5.1804

k8s-master

node1

192.168.6.87

CentOS 7.5.1804

k8s-node

node2

192.168.6.88

CentOS 7.5.1804

k8s-node

  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止 swap 分区

2.准备工作

注:所有的节点都进行配置

2.1 同步所有节点时间

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

vi /etc/sysconfig/clock
添加修改内容:
ZONE="Asia/Shanghai" 
UTC=false 
ARC=false

yum install -y ntpdate 

ntpdate time.windows.com

hwclock --systohc

2.2 修改主机名

hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

2.3 配置域名解析

# 修改 /etc/hosts
cat <<EOF >> /etc/hosts
192.168.6.86 master
192.168.6.87 node1
192.168.6.88 node2
EOF

2.4 安装必要的rpm软件

## 安装wget vim net-tools epel-release
yum install -y wget vim net-tools epel-release
## 安装 nfs-utils,必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils

2.5 关闭防火墙

# 开机禁用
systemctl disable firewalld

# 关闭
systemctl stop firewalld

2.6 关闭selinux

# 临时关闭
setenforce 0

# 修改SELINUX的配置文件,关闭SELINUX服务
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.7 禁用交换分区

# 临时关闭
swapoff -a

# 如需要永久禁用(可选),打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab

2.8 配置网络桥接与路由转发

# 将桥接的IPv4流量传递到iptables的链
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF


sysctl --system

2.9 配置yum源

# 下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#  更新缓存
yum clean all
yum makecache fast

2.10 安装docker

# 安装依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看支持的docker版本

yum list docker-ce --showduplicates | sort -r

指定版本安装

yum -y install docker-ce-19.03.9-3.el7  

设置开机启动

systemctl enable docker

启动 docker

systemctl start docker

查看docker服务是否已成功安装并启动

systemctl status docker

修改配置文件

vim /etc/docker/daemon.json  # 如果没有就创建

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
                   "https://alzgoonw.mirror.aliyuncs.com",
                   "https://docker.mirrors.ustc.edu.cn"
                   ]
}

重启docker服务

systemctl restart docker

3.安装 kubernetes

注:所有的节点都配置

3.1 添加 Kubernetes 阿里云 yum 源

# [] 中括号中的是repository id,唯一,用来标识不同仓库
# name 仓库名称,自定义
# baseurl 仓库地址
# enable 是否启用该仓库,默认为1表示启用
# gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
# repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
# gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

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 fast

3.2 安装 kubeadm、kubelet 和 kubectl

# 安装时指定版本号
# kubeadm: 用于初始化集群,启动集群的命令工具
# kubelet:集群中运行任务的代理程序,运行在集群所有节点上,用于启动Pod和容器等对象的工具
# kubectl:命令行管理工具,用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0

# 设置开机启动
systemctl enable kubelet

3.3 初始化

注:只在master节点配置

kubeadm init 
  --apiserver-advertise-address=192.168.6.86  
  --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
注:修改master IP 、kubernetes 版本

初始化完成后页面最下面会生成 token,之后会用到。

kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 
--discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26

使用 kubectl 工具

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看 .kube 目录,会在根目录下面生成 config 文件

ls .kube/
cache  config  http-cache

3.4 安装pod网络附加组件

注:只在master节点配置

# 解决kube-flannel.yml下载不下来问题
# vi /etc/hosts文件添加一条
# 199.232.68.133 raw.githubusercontent.com
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 检查CoreDNS pod是否正常工作(检查STATUS是否为Running)
kubectl get pods --all-namespaces -o wide

3.5 加入工作节点

注:node节点配置

在node1,node2节点上执行初始化时日志的输出内容

kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 
--discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26

如何移除节点

# 在控制节点上运行
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>

# 在要删除的节点上重置kubeadm安装状态
kubeadm reset

# 重置过程不会重置或清除iptables规则或IPVS表。如果要重置iptables,必须手动执行
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

# 如果要重置IPVS表,则必须运行以下命令
ipvsadm -C

# 删除kubeconfig文件
rm -f $HOME/.kube/config

3.6 集群扩容增加node节点

kubeadm join 192.168.1.138:6443 --token [TOKEN] --discovery-token-ca-cert-hash sha256:[SHA256]

token可以通过如下命令查看:

kubeadm token list

每个token只有24小时的有效期,如果没有有效的token,可以使用如下命令创建:

kubeadm token create

查看Kubernetes认证的SHA256加密字符串:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

3.7 测试 kubernetes 集群

查看节点的状态

状态为Ready表示和Master节点正常通信

[root@master ~]# kubectl get nodes
NAME    STATUS   ROLES    AGE    VERSION
master   Ready    master   22h    v1.15.0
node1    Ready    <none>   22h    v1.15.0
node2    Ready    <none>   22h    v1.15.0
 

查看k8s系统状态

状态为running表示正常

kubectl get pods --all-namespaces -o wide

测试pod

在 Kubernetes 集群中创建一个 pod,验证是否正常运行

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

访问地址:http://NodeIP:Port(本次安装对应地址:http://192.168.6.86:30606

4.部署Web UI界面(dashboard)

注:master节点部署

# 下载kubernetes-dashboard.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

#编辑kubernetes-dashboard.yaml
vi kubernetes-dashboard.yaml


# ------------------- Dashboard Deployment ------------------- #
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
    spec:
      containers:
      - name: kubernetes-dashboard
#        image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
        image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1

# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  # 新加 type:NodePort
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      # 新加 nodePort: 30001
      nodePort: 30001
  selector:
k8s-app: kubernetes-dashboard

启动kubernetes-dashboard.yaml 文件

kubectl apply -f kubernetes-dashboard.yaml

所有节点拉取镜像

docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1

查看dashboard运行状态

kubectl get pods -n kube-system -o wide

查询dashboard端口号

kubectl get svc -n kube-system -o wide

通过浏览器访问https://192.168.6.86:30001/

谷歌浏览器会报您的连接不是私密连接错误,在当前页面打开的时候点网页任意地方,不是在输入框,不是在输入框,不是在输入框,在chrome该页面上,直接键盘敲入这11个字符:thisisunsafe(鼠标点击当前页面任意位置,让页面处于最上层即可输入),或者使用火狐浏览器。

创建 service account 并绑定默认 cluster-admin 管理员集群角色并生成令牌(仅在master上面操作)

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

忘记token可以查看

kubectl describe secrets -n kube-system dashboard-admin

复制令牌到浏览器中登录

5.安装Heapster

编辑资源文件

heapster.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: heapster
  namespace: kube-system

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: heapster
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:heapster
subjects:
- kind: ServiceAccount
  name: heapster
  namespace: kube-system

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  selector:
      matchLabels:
        k8s-app: heapster
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
    spec:
      serviceAccountName: heapster
      containers:
      - name: heapster
        # image: k8s.gcr.io/heapster-amd64:v1.5.4 将默认google的官方镜像替换为阿里云镜像
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4
        command:
        - /heapster
        - --source=kubernetes:https://kubernetes.default?useServiceAccount=true&kubeletHttps=true&kubeletPort=10250&insecure=true
---
apiVersion: v1
kind: Service
metadata:
  labels:
    task: monitoring
    # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
    # If you are NOT using this as an add-on, you should comment out this line.
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
k8s-app: heapster

heapster-clusterrole.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:heapster
rules:
- apiGroups:
  - ""
  resources:
  - events
  - namespaces
  - nodes
  - pods
  - nodes/stats
  verbs:
  - create
  - get
  - list
  - watch
- apiGroups:
  - extensions
  resources:
  - deployments
  verbs:
  - get
  - list
  - watch

kubectl apply -f heapster.yaml

kubectl apply -f heapster-clusterrole.yaml

效果:

 

最后

以上就是无奈鸵鸟为你收集整理的kubernetes单master集群搭建的全部内容,希望文章能够帮你解决kubernetes单master集群搭建所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部