k8s集群环境搭建以及插件安装

news2024/11/28 23:16:51

前置条件

终端工具MobaXterm很好用。
1、虚拟机三台(ip按自己的网络环境相应配置)(master/node)

节点ip
k8s-master192.168.200.150
k8s-node1192.168.200.151
k8s-node2192.168.200.152

2、关闭防火墙(master/node)

systemctl stop firewalld 
systemctl disable firewalld

查看防火墙状态:systemctl status firewalld
3、关闭selinux(master/node)

setenforce 0  # 临时关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  # 永久关闭 

4、关闭swap(master/node)

swapoff -a    # 临时关闭;关闭swap主要是为了性能考虑
free             # 可以通过这个命令查看swap是否关闭了
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久关闭

5、添加主机名与IP对应的关系(master/node)
$ vim /etc/hosts
#添加如下内容:
192.168.200.150 k8s-master
192.168.200.151 k8s-node1
192.168.200.152 k8s-node2
#保存退出
6、修改主机名(master/node)
#k8s-master
[root@localhost ~] hostname
localhost.localdomain
[root@localhost ~] hostname k8s-master ##临时生效
[root@localhost ~] hostnamectl set-hostname k8s-master ##重启后永久生效
#k8s-node1
[root@localhost ~] hostname
localhost.localdomain
[root@localhost ~] hostname k8s-node1 ##临时生效
[root@localhost ~] hostnamectl set-hostname k8s-node1 ##重启后永久生效
7、桥接设置(master/node)

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

sysctl --system

以上几步最好照着都执行一下,以免后面报一大堆错

安装docker(master/node)

注意docker与k8s 的版本对照关系。本次按照的k8s版本为1.18.0,对应的docker版本为docker-ce-19.03.9-3.el7
如果已经安装了dokcer就不需要重复安装了
1.安装wget
$ yum -y install wget
2.添加docker yum源
$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
3.安装docker
$ yum -y install docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7
4.设置开机启动
$ systemctl enable docker
5.启动docker
$ systemctl start docker

6.编辑docker配置文件

mkdir /etc/docker/ 
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://gqs7xcfd.mirror.aliyuncs.com","https://hub-mirror.c.163.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF

7.重启docker
$ systemctl restart docker

安装kubernetes

1.为kubernetes添加阿里云YUM软件源(master/node)

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[k8s]
name=k8s
enabled=1
gpgcheck=0 
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
EOF

2.安装kubeadm,kubelet和kubectl(master/node)
版本可以选择自己要安装的版本号,我安装的是1.18.0
$ yum install -y kubelet-1.18.0 kubectl-1.18.0 kubeadm-1.18.0
3.设置开机自启动

$ systemctl enable kubelet

master节点初始化

部署Kubernetes (master) ,node节点不需要执行kubeadm init

kubeadm init \
  --apiserver-advertise-address=192.168.200.150 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

因为初始化的时候会做一下检查,如果出现一下错误。

[preflight] Running pre-flight checks error execution phase preflight:
[preflight] Some fatal errors occurred:
[ERROR Swap]: running with swap on is not supported. Please disable swap [preflight] If you know what you are doing, you can make
a check non-fatal with --ignore-preflight-errors=... To see the
stack trace of this error execute with --v=5 or higher

重启一下就好了,刚才修改的swap没有生效。
初始化完成可以看到下面的画面,如果有错误的话需要排查一下。
在这里插入图片描述
配置kubectl

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

查看节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 6m42s v1.18.0

在两台Node节点上执行join命令

在两台node节点上分别执行join命令

kubeadm join 192.168.200.150:6443 --token 6mjjzr.imfudxt8568utrvv \
    --discovery-token-ca-cert-hash sha256:c89fd5ec80eac07429aeb450d475eec53d7d88e51c489c817fd5b7d8f3ebe3ce

查看节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 9m54s v1.18.0
k8s-node1 NotReady 42s v1.18.0
k8s-node2 NotReady 46s v1.18.0

安装插件

1.安装 flannel
从官网下载yaml文件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

然后执行yaml文件

kubectl apply -f kube-flannel.yml
查看所有pod
kubectl  get pods -A
查看命名空间pod
kubectl -n <namespace> get pods -o wide

2.部署busybox来测试集群各网络情况
vi busybox.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
spec:
  replicas: 2
  selector:
    matchLabels:
      name: busybox
  template:
    metadata:
      labels:
        name: busybox
    spec:
      containers:
      - name: busybox
        image: busybox  
        imagePullPolicy: IfNotPresent
        args:
        - /bin/sh
        - -c
        - sleep 1; touch /tmp/healthy; sleep 30000
        readinessProbe:   
          exec:
            command:
            - cat
            - /tmp/healthy
          initialDelaySeconds: 1

kubectl apply -f busybox.yaml
查看所有pod

[root@k8s-master ~]# kubectl  get pods -A -o wide
NAMESPACE      NAME                                 READY   STATUS    RESTARTS   AGE     IP                NODE         NOMINATED NODE   READINESS GATES
default        busybox-7c84546778-69hq7             1/1     Running   0          90s     10.244.2.2        k8s-node1    <none>           <none>
default        busybox-7c84546778-plzwg             1/1     Running   0          90s     10.244.1.2        k8s-node2    <none>           <none>

进入pod,查看pod 和各node是否互通

kubectl exec -it busybox-7c84546778-69hq7 -- /bin/sh
/ # ping -c 10.244.1.2
ping: invalid number '10.244.1.2'
/ # ping -c -2 10.244.1.2
ping: invalid number '-2'
/ # ping -c 2 10.244.1.2
PING 10.244.1.2 (10.244.1.2): 56 data bytes
64 bytes from 10.244.1.2: seq=0 ttl=62 time=0.504 ms
64 bytes from 10.244.1.2: seq=1 ttl=62 time=1.611 ms

--- 10.244.1.2 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.504/1.057/1.611 ms
/ # ping -c 2 192.168.200.151
PING 192.168.200.151 (192.168.200.151): 56 data bytes
64 bytes from 192.168.200.151: seq=0 ttl=64 time=0.070 ms
64 bytes from 192.168.200.151: seq=1 ttl=64 time=0.074 ms

--- 192.168.200.151 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.070/0.072/0.074 ms
/ # ping -c 2 192.168.200.152
PING 192.168.200.152 (192.168.200.152): 56 data bytes
64 bytes from 192.168.200.152: seq=0 ttl=63 time=0.273 ms
64 bytes from 192.168.200.152: seq=1 ttl=63 time=0.203 ms

--- 192.168.200.152 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.203/0.238/0.273 ms

部署dashboard

下载dashboard

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

#修改dashboard配置,特别要注意空格,要按照前面的对齐!
#vim recommended.yaml

#增加nodeport配置
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort #增加此行
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000 #增加此行
  selector:
    k8s-app: kubernetes-dashboard


kubectl apply -f recommended.yaml

[root@k8s-master ~]# kubectl get pod -n kubernetes-dashboard
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-6b4884c9d5-vmfzc   1/1     Running   0          2m9s
kubernetes-dashboard-7f99b75bf4-2d7sg        1/1     Running   0          2m9s

访问地址:https://192.168.200.150:30000/#/login
在这里插入图片描述

创建用户
如上图,跳转到了登录页面,那我们就先创建个用户:

1.创建服务账号
首先创建一个叫admin-user的服务账号,并放在kube-system名称空间下:

admin-user.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system

执行kubectl create命令:

kubectl create -f admin-user.yaml

2.绑定角色
默认情况下,kubeadm创建集群时已经创建了admin角色,我们直接绑定即可:

admin-user-role-binding.yaml

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

执行kubectl create命令:

kubectl create -f  admin-user-role-binding.yaml

3.获取Token
现在我们需要找到新创建的用户的Token,以便用来登录dashboard:

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

输出类似:

Name:         admin-user-token-qrj82
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=admin-user
              kubernetes.io/service-account.uid=6cd60673-4d13-11e8-a548-00155d000529

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXFyajgyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2Y2Q2MDY3My00ZDEzLTExZTgtYTU0OC0wMDE1NWQwMDA1MjkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.C5mjsa2uqJwjscWQ9x4mEsWALUTJu3OSfLYecqpS1niYXxp328mgx0t-QY8A7GQvAr5fWoIhhC_NOHkSkn2ubn0U22VGh2msU6zAbz9sZZ7BMXG4DLMq3AaXTXY8LzS3PQyEOCaLieyEDe-tuTZz4pbqoZQJ6V6zaKJtE9u6-zMBC2_iFujBwhBViaAP9KBbE5WfREEc0SQR9siN8W8gLSc8ZL4snndv527Pe9SxojpDGw6qP_8R-i51bP2nZGlpPadEPXj-lQqz4g5pgGziQqnsInSMpctJmHbfAh7s9lIMoBFW7GVE8AQNSoLHuuevbLArJ7sHriQtDB76_j4fmA
ca.crt:     1025 bytes
namespace:  11 bytes

然后把Token复制到登录界面的Token输入框中,登入后显示如下:
在这里插入图片描述

部署metrics-server

下载metrics-server(会抽风下载不下来)

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

修改镜像地址
将部署文件中镜像地址修改为国内的地址,大概在部署文件的第140行。 原配置是:

image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2
修改后的配置是:

image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.2

部署metrics server
kubectl create -f components.yaml

查看metric server的运行情况,发现探针问题:Readiness probe failed: HTTP probe failed with statuscode: 500

[root@centos05 deployment]# kubectl get pods -n kube-system | grep metrics
kube-system metrics-server-7f6b85b597-j2p5h 0/1 Running 0 2m23s
[root@centos05 deployment]# kubectl describe pod metrics-server-7f6b85b597-j2p5h -n kube-system

在大概 139 行的位置追加参数:–kubelet-insecure-tls,修改后内容如下:

spec:
  containers:
  - args:
    - --cert-dir=/tmp
    - --secure-port=4443
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --kubelet-use-node-status-port
    - --metric-resolution=15s
    - --kubelet-insecure-tls

再次部署文件:

kubectl apply -f components.yaml

执行kubectl top命令成功:

[root@k8s-master kubernetes]# kubectl top pod
NAME                                CPU(cores)   MEMORY(bytes)
busybox-7c84546778-69hq7            1m           0Mi
busybox-7c84546778-plzwg            1m           0Mi
nginx-deployment                    0m           1Mi
nginx-deployment-788b8d7b98-528cj   0m           1Mi
nginx-deployment-788b8d7b98-8j6q4   0m           1Mi

再进入dashboard发现有监控了,token过期的话再执行上面获取token一次。
在这里插入图片描述

完结,后续继续学习k8s吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1392448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python调用windows弹窗

python调用windows弹窗 import win32api import _thread # 引入线程的模块 比较老的模块 新的 threadingdef run(i):win32api.MessageBox(0, "您的{}号大宝贝上线了".format(i), "来自小莹的问候", 2)for i in range(5):_thread.start_new_thread(run…

入门指南:使用STM32微控制器进行ADC数据采集

使用STM32微控制器进行ADC&#xff08;模数转换器&#xff09;数据采集是嵌入式系统开发中常见的任务。本文将介绍如何通过STM32CubeMX和HAL库函数进行ADC数据采集&#xff0c;并提供相应的代码示例。 1. STM32CubeMX配置 首先&#xff0c;使用STM32CubeMX工具配置STM32微控制…

一条sql是如何运行的

在我们平时使用sql的时候&#xff0c;基本是基于黑盒的使用方式&#xff0c;在客户端输入一条sql语句&#xff0c;然后回显想要的数据&#xff0c;对于mysql server端内部如何运行的以及与存储引擎如何交互的不得而知。 通过下面一幅图&#xff0c;大致描述客户端和服务端交互…

【数据结构】归并排序的两种实现方式与计数排序

前言&#xff1a;在前面我们讲了各种常见的排序&#xff0c;今天我们就来对排序部分收个尾&#xff0c;再来对归并排序通过递归和非递归的方法进行实现&#xff0c;与对计数排序进行简单的学习。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏…

计算机服务器中了lockbit3.0勒索病毒如何处理,勒索病毒解密数据恢复

近期&#xff0c;网络上的勒索病毒非常猖狂&#xff0c;给企业的生产运营带来了极大困难&#xff0c;网络技术的发展为企业的生产运营提供了极大便利&#xff0c;但也为企业的数据安全带来严重威胁。经过云天数据恢复中心对近期lockbit3.0勒索病毒解密&#xff0c;为大家整理了…

基于生成模板的动态前缀微调事件抽取(ACL2022)

1、写作动机&#xff1a; 尽管将事件抽取任务转换为具有提示的序列生成问题越来越多&#xff0c;但基于生成的方法仍存在两个重大挑战&#xff0c;包括使用欠佳的提示和静态事件类型信息。 欠佳的提示&#xff1a;手动为每种事件类型设计提示&#xff0c;没有调优&#xff0c…

数据库的安全管理

数据库的安全管理 一、实验目的 掌握用户账号的创建、查看、修改、删除的方法。掌握用户权限设置方法。掌握角色的创建、删除方法。 二、实验内容用户账号的创建、查看、修改、删除的SQL语句。用户权限设置SQL语句。角色的创建、删除SQL语句。 三、实验步骤在本地主机创建用户…

代码随想录-刷题第五十七天

42. 接雨水 题目链接&#xff1a;42. 接雨水 思路&#xff1a;本题十分经典&#xff0c;使用单调栈需要理解的几个问题&#xff1a; 首先单调栈是按照行方向来计算雨水&#xff0c;如图&#xff1a; 使用单调栈内元素的顺序 从大到小还是从小到大呢&#xff1f; 从栈头&…

c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

题目 用一个宏&#xff0c;可以将一个整数的二进制位的奇数位和偶数位交换。 如&#xff1a;01&#xff0c;是1&#xff0c;交换完是10&#xff0c;是2. 思路 1.分别取出奇数位上的数字和偶数位上的数字 举个例子&#xff1a;1001 0110 1001 0110 奇…

(Matlab)基于CNN-Bi_LSTM的多维回归预测(卷积神经网络-双向长短期记忆网络)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码展示&#xff1a; 四、完整程序数据分享&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平…

Databend 开源周报第 128 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 使用 Databend …

dpwwn:01

靶机下载地址 dpwwn: 1 ~ VulnHub 信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-14 22:24 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00014s latency). MAC Address: 00:50:56:C0:…

机器学习与数据科学-专题1 Python正则表达式-【正则表达式入门-1】

文章目录 第一关相关知识任务要求代码 第二关相关知识任务要求代码 第三关相关知识注意任务描述代码 第一关 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 在 Python 中使用正则表达式&#xff1b; 最基础正则表达式&#xff1b; 正则匹配函数。 在 Python…

grep 在运维中的常用可选项

一、对比两个文件 vim -d <filename1> <filename2> 演示&#xff1a; 需求&#xff1a;&#xff5e;目录下有两个文件一个test.txt 以及 text2.txt,需求对比两个文件的内容。 执行后会显示如图&#xff0c;不同会高亮。 二、两次过滤 场景&#xff1a;当需要多…

为什么有些赤霞珠葡萄酒会出现“青椒”的味道?

有几种著名的赤霞珠口味与葡萄栽培和气候影响密切相关&#xff0c;最广为人知的是吡嗪引起的草本或青椒味&#xff0c;在未成熟的葡萄中更普遍。所有赤霞珠葡萄中都存在吡嗪化合物&#xff0c;随着葡萄的继续成熟&#xff0c;它们逐渐被阳光破坏。 对于人类口感来说&#xff0…

vue3-事件处理

事件监听 DOM 事件监听指令 v-on 简写 v-on:click"handler" 或者 click"handler"事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;比如 click 方法事件处理器&#xff1a;一个指向组件上定义的方法的属性名或是路径。 在内联…

Python爬虫实战:IP代理池助你突破限制,高效采集数据

当今互联网环境中&#xff0c;为了应对反爬虫、匿名访问或绕过某些地域限制等需求&#xff0c;IP代理池成为了一种常用的解决方案。IP代理池是一个包含多个可用代理IP地址的集合&#xff0c;可以通过该代理池随机选择可用IP地址来进行网络请求。 IP代理池是一组可用的代理IP地址…

[Linux 进程(四)] 再谈环境变量,程序地址空间初识

文章目录 1、前言2、环境变量2.1 main函数第三个参数 -- 环境参数表2.2 本地环境变量和env中的环境变量2.3 配置文件与环境变量的全局性2.4 内建命令与常规命令2.5 环境变量相关的命令 3、程序地址空间 1、前言 上一篇我们讲了环境变量&#xff0c;如果有不明白的先读一下上一…

IOS-高德地图路径绘制-Swift

本文展示的是在IOS开发中调用高德地图进行驾车路径绘制&#xff0c;开发语言是Swift。 IOS高德地图集成请看&#xff1a;IOS集成高德地图Api 使用路径规划功能需要集成高德地图的搜索功能。 pod AMapSearch定义AMapSearchAPI 定义主搜索对象 AMapSearchAPI &#xff0c;并继承…

2023年第十四届蓝桥杯软件赛省赛总评

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…