一、k8s部署前机器准备

0、机器准备

生产测试环境相关机器配置可自行搜索查看,此次部署采用两台腾讯轻量云服务器;(因为轻量云服务器也踩了很多坑,如有相同的小伙伴可重点看章节二k8s部署中master节点安装部分

1、 升级Linux内核到最新版

CentOS7,默认的内核版本是3.10.0;

#导入ELRepo仓库的公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#为yum安装ELRepo仓库
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#查看可用版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新内核
yum --enablerepo=elrepo-kernel install kernel-ml
# 查看当前可用内核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
# 选择相应版本
grub2-set-default ${序号}
PS: grub2-set-default 1
# 升级完成,可以通过uname -r命令进项验证。
uname -r

2、设置时间与网络同步

centos7:

# 1 查看系统时间
timedatectl
# 2 设置时区为北京时间
timedatectl set-timezone Asia/Shanghai
# 3.设置时间同步网络
本节所有命令均在root用户下运行。
# 3.1安装ntp服务
# 如果已经安装,此命令会自动无效。
yum install -y ntp
# 3.2修改ntp相关参数
vi /etc/sysconfig/ntpd
将其修改为:
SYNC_HWCLOCK=yes
OPTIONS="-g -x"
# 3.3启动ntp服务
在这里实际调用的是重启命令,这样可以忽略ntp服务的当前状态。
systemctl restart ntpd
# 3.4设置ntp服务开机启动
systemctl enable ntpd
# 3.5设置Linux系统时钟与远程NTP服务器同步
timedatectl set-ntp true

centos8:

#1.chrony安装
yum install -y chrony
#2.启动chrony服务
systemctl start chronyd
#3.设置系统开机自动启动chrony服务
systemctl enable chronyd
#4.查看系统时间是否已同步
date

4、hosts设置

    vim /etc/hosts
43.143.65.53 k8s-master
1.116.132.201 k8s-node01

5、设置防火墙为Iptables并设置空规则

# 关闭防火墙
systemctl stop firewalld
# 关闭防火墙开机启动
systemctl disable firewalld
# 置空规则
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables sav
# 由于k8s内部节点之间的通讯使用的是内网ip,我们需要把内网ip的重定向到公网ip上(master与node节点分别执行对应的命令)
iptables -t nat -A OUTPUT -d 10.0.4.5 -j DNAT --to-destination 43.143.65.53
iptables -t nat -A OUTPUT -d 10.0.4.3 -j DNAT --to-destination 1.116.132.201

6、 关闭selinux

因为K8s安装的时候会去检测swap分区有无关闭,如果开启了话可能会把pod放在虚拟内存运行,大大降低工作效率。(也可以通过–ingress排除)

# 临时关闭 ,但是重启系统后还会开启
setenforce 0
# 永久关闭 输入命令vi /etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled,然后保存退出。
vi /etc/selinux/config

7、关闭swap

# 临时
swapoff -a
# 永久
sed -ri 's/.*swap.*/#&/' /etc/fstab

8、关闭系统不需要的服务

systemctl stop postfix && systemctl disable postfix

9、端口开放(非云服务器不需执行)

由于两台机器是处于公网环境,且k8s节点之间需要通讯,所以需要开放一些端口,端口配置可以直接进到腾讯云控制台进行配置

以下是官网要求的master节点的端口配置

以下是官网要求的node节点的端口配置

10、docker安装

yum install -y yum-utils
# 添加yum源,这里添加的是阿里云的yum源
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-20.10.12-3.el7
# 设置国内镜像加速,你也可以用自己的仓库镜像,这里是我申请的阿里云个人加速镜像
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ui3fq00k.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 导入镜像设置
systemctl daemon-reload
# 启动docker
systemctl restart docker
# 设置docker开机启动
systemctl enable docker

11、桥接IPV4流量传递到iptables 的链 (master和node01节点均需要)

tee /etc/sysctl.d/k8s.conf <<-'EOF'
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF# 配置生效
sysctl -p /etc/sysctl.d/k8s.conf

12、配置k8s yum源(master和node01节点均需要)

tee /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

13、安装kubeadm(初始化cluster),kubelet(启动pod)和kubectl(k8s命令工具) (master和node01节点均需要)

yum install -y kubelet-1.20.5
yum install -y kubeadm-1.20.5
yum install -y kubectl-1.20.5

14、拉取镜像及改名

images.sh

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5  k8s.gcr.io/kube-proxy:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5 k8s.gcr.io/kube-scheduler:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5 k8s.gcr.io/kube-apiserver:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5 k8s.gcr.io/kube-controller-manager:v1.20.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0  k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2  k8s.gcr.io/pause:3.2docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0

运行脚本

bash images.sh

可以看到镜像已经下载安成,并改修改tag为k8s.gcr.io/*

二、k8s部署

1、master节点安装

1、初始化

kubeadm init \--apiserver-advertise-address=43.143.65.53 \    # 此处43.143.65.53 为公网ip--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.20.5 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--ignore-preflight-errors=all \--v=6

这个地方一定会报错

当出现以下情况下需要etcd.yaml

在输入上述命令后,kubeadm即开始了master节点的初始化,但是由于etcd配置文件不正确,所以etcd无法启动,要对该文件进行修改。
文件路径"/etc/kubernetes/manifests/etcd.yaml" :

此处"43.143.65.53"为腾讯云公网ip,要关注的是"–listen-client-urls"和"–listen-peer-urls"。需要把–listen-client-urls后面的公网IP删除,把–listen-peer-urls改成127.0.0.1:2380

原因是因为腾讯云只要选择VPC网络均是采用NAT方式将公网IP映射到私人网卡的,有兴趣的同学可以了解下NAT。这也就是为什么很多同事无法在腾讯云或阿里云上安装k8s集群的原因

弹出以下信息表示master节点安装成功(注意红色框框部分,node节点安装时需要用到)

# 按照提示执行即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2、部署容器网络

curl https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml >>kube-flannel.yml
chmod 777 kube-flannel.yml
kubectl apply -f kube-flannel.yml

3、查看cs状态

kubectl get cs

发现controller-manager和scheduler状态不对。

原因是默认端口是0了,需要注释掉/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml的- – port=0

# 注释完重启服务
systemctl restart kubelet.service
# 查看组件状态
kubectl get cs

如上图所示即为成功;

到此,master节点部署完成(为了不浪费资源我们一般需要允许master节点部署pod,需要运行以下命令)

kubectl taint nodes --all node-role.kubernetes.io/master-

2、node节点部署

在node节点运行初始化master节点时提供的命令即可;

kubeadm join 43.143.65.53:6443 --token 3ycdz8.v2g4csbh3p20qweg \--discovery-token-ca-cert-hash sha256:c23830bb3046cc14cdb4dd422eab6cda74f747648b79e09bb4d9fea8244c9e04

默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

3、测试

等待5分钟左右在master节点运行

kubectl get nodes -o wide

可以看到node01由noready变成ready

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

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

访问地址:http://<任意Node的IP>:Port ,如:

至此,k8s部署成功!!!

三、部署dashboard

Dashboard是官方提供的一个UI,可用于基本管理K8s资源。

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

如果下载不下来,可自行搜索同版本recommended.yaml;
也可从云盘直接下载(提取码:69jd):recommended.yaml
PS: 云盘中文件已做修改,如需使用可跳过下一步,直接apply

默认Dashboard只能集群内部访问,您可以运行命令vi recommended.yaml修改Service类型为NodePort,方便集群外的机器访问。

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443targetPort: 8443nodePort: 30443selector:k8s-app: kubernetes-dashboardtype: NodePort

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

待所有pod处于running的状态后,创建service account并绑定默认cluster-admin管理员集群角色:

# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

访问地址:https://<任意Node的IP>:30443,将上条命令产生的token复制后填入,进行登录.


至此。k8s部署全部结束。

PS: 感谢大佬文章
如何通过kubeadm部署k8s集群

k8s-k8s部署(云服务器可参考)相关推荐

  1. 华为虚拟一键部署服务器,一键部署云服务器

    一键部署云服务器 内容精选 换一换 SAP NetWeaver分布式部署如图1所示.该部署方式是由多个SAP实例组成,一个SAP实例是一组同时开始和结束的进程.在分布式系统中,所有实例都运行在独立的云 ...

  2. 服务器ip控制系统叫什么,部署云服务器时ip是什么意思

    部署云服务器时ip是什么意思 内容精选 换一换 删除是指删除弹性云服务器,删除时可以选择同时删除弹性公网IP和数据盘.如果不选择,则会保留,需要您单独删除.删除弹性云服务器的操作如下:登录管理控制台. ...

  3. Flask项目部署云服务器 CentOS7.3+Redis+MySQL+Flask+Nginx+Gunicorn +Supervisorctl

    Flask项目部署云服务器 CentOS7.3+Redis+MySQL+Flask+Nginx+Gunicorn +Supervisorctl 项目运行环境 阿里云(单核CPU, 2G内存, Cent ...

  4. 简陋的spring cloud搭建并部署云服务器

    目录 1.创建父项目 2.创建本地Eureka注册中心模块 1.Eureka-server 2.Eureka-client(HelloWorld) 3.总结 3.添加包含业务的eureka子模块 4. ...

  5. 将安卓项目部署云服务器,将app项目部署到云服务器上

    将app项目部署到云服务器上 内容精选 换一换 ContainerOps需要与其他云服务协同工作,ContainerOps和其他云服务的关系如图1.云容器引擎云容器引擎(Cloud Container ...

  6. hexo部署云服务器的全过程

    目录 前言 环境 本地环境 服务器环境 本地机器配置 配置密钥 使用git bash生成ssh公钥 服务器配置 安装Git,nodejs,Nginx等 创建git新用户及配置 创建git新用户 将公钥 ...

  7. 自托管websocket和webapi部署云服务器域名及远程访问

    当写完websocket和webapi服务端时,在本地测试时是没有问题的,因为是通过本地IP及端口号访问(例:127.0.0.1:8080\api\test),也就没有防火墙等安全限制,但当部署到云服 ...

  8. uniapp项目打包与部署云服务器

    uniapp项目的打包 第一步,在manifest里面配置好基础路径和端口 然后进行发布,填好自己的云服务器域名 打包成功后,项目在如图h5路径下,拿着h5文件的压缩包就可以去部署了 第二步,你要有一 ...

  9. Vue项目从 打包优化 到 上线部署 云服务器的全过程(**教你在云服务器上优化部署自己的项目**)

    前言 作为前端开发人员,我们不仅要会写代码,优化打包,上线部署也是一个前端工程师必备的技能,这篇文章就教大家从零开始,把一个完整项目打包发布到线上服务器.首先的准备工作就是需要一台云服务器. 项目打包 ...

最新文章

  1. Ubuntu12.04LTS添加broadcom 802.11g无线网卡驱动
  2. ActiveMQ — 单节点 — 安装与配置
  3. Struts2(1)简介
  4. 使用SMARTFORM字段参数设置解决SMARTFORM中数量、金额字段显示问题
  5. sap寄售退货单_多个退货单
  6. jquery通过attr取html里自定义属性原来这么方便啊
  7. 面试官系统精讲Java源码及大厂真题 - 34 只求问倒:连环相扣系列锁面试题
  8. Reflector反编译winform心得
  9. C# 遍历DLL导出函数
  10. 鼠标点击改变单元格颜色或点击改变行颜色
  11. HttpClient4 基本操作
  12. Snipaste2.7.3下载安装与使用(超实用的截图利器)
  13. 麻省理工学院计算机科学与工程博士,2020美国麻省理工大学计算机科学博士专排...
  14. 解决Android调试不显示 “允许USB调试” 认证窗口
  15. 好心情患者故事:节食暴食反复横跳,我确诊了重度抑郁
  16. android手机传感器,安卓手机传感器
  17. zoj Heavy Cargo
  18. 全志a10 Android,全志A10 Android4.0 电话系统 使用说明文档 (MU509篇)
  19. php mail 权限,PHP mail()函数漏洞总结 · MYZ’s Blog
  20. 把金额类型转换成大写和英文

热门文章

  1. V神讲述veTokens的恩怨情仇:原理、权力与未来趋势
  2. hashmap常用方法
  3. 执行server-start时emacs报错说“The directory `~/.emacs.d/server#39; is unsafe”
  4. 【Python应用探索笔记一】百度人脸检测与人脸比对
  5. Python番外篇:爬取腾讯新闻热点内容 并发送新闻提示电子邮件
  6. C语言篇+ 指针进阶(上)
  7. pyecharts打印图片为空白
  8. shell十三问之16:学习总结与原帖目录
  9. java 用split分割小数点
  10. cogs 1396. wwww