我是靠谱客的博主 无奈鸵鸟,这篇文章主要介绍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 同步所有节点时间

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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 修改主机名

复制代码
1
2
3
hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2

2.3 配置域名解析

复制代码
1
2
3
4
5
6
# 修改 /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软件

复制代码
1
2
3
4
## 安装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 关闭防火墙

复制代码
1
2
3
4
5
# 开机禁用 systemctl disable firewalld # 关闭 systemctl stop firewalld

2.6 关闭selinux

复制代码
1
2
3
4
5
# 临时关闭 setenforce 0 # 修改SELINUX的配置文件,关闭SELINUX服务 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.7 禁用交换分区

复制代码
1
2
3
4
5
# 临时关闭 swapoff -a # 如需要永久禁用(可选),打开/etc/fstab注释掉swap那一行。 sed -i 's/.*swap.*/#&/' /etc/fstab

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

复制代码
1
2
3
4
5
6
7
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源

复制代码
1
2
3
4
5
6
# 下载阿里源 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

复制代码
1
2
3
# 安装依赖 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版本

复制代码
1
yum list docker-ce --showduplicates | sort -r

指定版本安装

复制代码
1
yum -y install docker-ce-19.03.9-3.el7  

设置开机启动

复制代码
1
systemctl enable docker

启动 docker

复制代码
1
systemctl start docker

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

复制代码
1
systemctl status docker

修改配置文件

复制代码
1
2
3
4
5
6
7
8
9
vim /etc/docker/daemon.json  # 如果没有就创建 {   "exec-opts": ["native.cgroupdriver=systemd"],   "registry-mirrors": [ "https://alzgoonw.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn" ] }

重启docker服务

复制代码
1
systemctl restart docker

3.安装 kubernetes

注:所有的节点都配置

3.1 添加 Kubernetes 阿里云 yum 源

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# [] 中括号中的是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

复制代码
1
2
3
4
5
6
7
8
# 安装时指定版本号 # 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节点配置

复制代码
1
2
3
4
5
6
7
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,之后会用到。

复制代码
1
2
kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 --discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26

使用 kubectl 工具

复制代码
1
2
3
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 文件

复制代码
1
2
ls .kube/ cache  config  http-cache

3.4 安装pod网络附加组件

注:只在master节点配置

复制代码
1
2
3
4
5
6
# 解决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节点上执行初始化时日志的输出内容

复制代码
1
2
kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6 --discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26

如何移除节点

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 在控制节点上运行 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节点正常通信

复制代码
1
2
3
4
5
[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,验证是否正常运行

复制代码
1
2
3
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节点部署

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 下载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 文件

复制代码
1
kubectl apply -f kubernetes-dashboard.yaml

所有节点拉取镜像

复制代码
1
docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1

查看dashboard运行状态

复制代码
1
kubectl get pods -n kube-system -o wide

查询dashboard端口号

复制代码
1
kubectl get svc -n kube-system -o wide

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

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

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

复制代码
1
2
3
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可以查看

复制代码
1
kubectl describe secrets -n kube-system dashboard-admin

复制令牌到浏览器中登录

5.安装Heapster

编辑资源文件

heapster.yaml

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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集群搭建内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部