准备

服务器:3台机器——1台主、2台工作节点,可以使用virtualbox 搭建虚拟机

主机名 centos version ip docker version flannel version 主机配置 备注
master01 7.7.1908 192.168.56.101 19.03.8 v0.12.0-amd64 2P 2G 20G
node01 7.7.1908 192.168.56.102 19.03.8 v0.12.0-amd64 2P 2G 20G
node02 7.7.1908 192.168.56.103 19.03.8 v0.12.0-amd64 2P 2G 20G

k8s版本

主机名 kubelet version kubeadm version kubectl version 备注
master01 v1.18.2 v1.18.2 v1.18.2
node01 v1.18.2 v1.18.2 v1.18.2
node01 v1.18.2 v1.18.2 v1.18.2

基本设置:

关闭防火墙:

systemctl stop firewalld & systemctl disable firewalld

关闭swap

#临时关闭
swapoff -a
#永久关闭,重启后生效
vi /etc/fstab
#注释以下代码
/dev/mapper/centos-swap swap ...

关闭selinux

#获取状态
getenforce
#暂时关闭
setenforce 0
#永久关闭 需重启
vi /etc/sysconfig/selinux
#修改以下参数,设置为disable
SELINUX=disabled

修改网络配置

# 所有机器上都要进行
$ cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#
$ sysctl --system

统一时间【如果需要】

#统一时区,为上海时区
ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
bash -c "echo 'Asia/Shanghai' > /etc/timezone"
#统一使用阿里服务器进行时间更新
yum install -y ntpdate #安装ntpdate工具
ntpdate ntp1.aliyun.com #更新时间

安装docker:

  • 1,删除原有的docker组件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
  • 2,配置系统docker源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
## 注意:此处更换了阿里的源,适用国内用户
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 3,查看docker安装列表,选择并安装
sudo yum list docker-ce --showduplicates
# 此处直接安装最新版本的docker-ce
sudo yum install -y docker-ce # 注:如果要安装指定的版本可以参考下边的命令
sudo yum install -y docker-ce-3:19.03.8-3.el7.x86_64
  • 4.启动docker
sudo systemctl  enable docker &&  systemctl  start docker

# 进入阿里云帐号,依次进入:控制台——容器镜像服务(可以搜索到)——镜像中心——镜像加速器。镜像加速器中获取到加速器地址: "https://xxxxxxx.mirror.aliyuncs.com"

#linux下默认文件为/etc/docker/daemon.json,添加下列仓库
$ sudo vi /etc/docker/daemon.json {
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
} # 重启docker使其生效
$ sudo systemctl restart docker

安装K8S组件:

  • 1,更新K8S源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 2, kubelet、kubeadm、kubectl
$ yum install -y kubelet kubeadm kubectl
# 启动kubelet 服务
$ systemctl enable kubelet && systemctl start kubelet

host配置

#分别在服务器上修改hostname,使用hostnamectl命令,或者直接修改/etc/hostname 文件
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02 #每台机器都执行
# cat >> /etc/hosts << EOF
192.168.56.101 master01
192.168.56.102 node01
192.168.56.103 node02
EOF # check
# cat /etc/hosts

验证MAC地址确保唯一

# enp0s3 网卡设备名称,根据自己实际情况进行改动
# cat /sys/class/net/enp0s3/address
# cat /sys/class/dmi/id/product_uuid

配置master服务器

配置k8s初始化文件

k8s config 命令参考

master节点下 生成默认配置文件

$ kubeadm config print init-defaults > init-kubeadm.conf

修改init-kubeadm.conf 主要参数

#imageRepository: k8s.gcr.io 更换k8s镜像仓库
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
# kubernetesVersion: v1.18.0 修改为版本 v1.18.2
kubernetesVersion: v1.18.2
# localAPIEndpointc,advertiseAddress为master-ip ,port默认不修改
localAPIEndpoint:
advertiseAddress: 192.168.56.101 #此处为master的IP
bindPort: 6443
# 配置子网络
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #添加pod子网络,使用的是flannel网络

拉取下载k8s组件

#查看安装时需要的镜像文件列表
$ kubeadm config images list --config init-kubeadm.conf k8s.gcr.io/kube-apiserver:v1.18.2
k8s.gcr.io/kube-controller-manager:v1.18.2
k8s.gcr.io/kube-scheduler:v1.18.2
k8s.gcr.io/kube-proxy:v1.18.2
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
#下载,根据配置文件进行镜像下载,如果此处下载比较缓慢可以考虑更换配置文件中的imageRepository参数
$ kubeadm config images pull --config init-kubeadm.conf

初始化k8s

# init
#如果kubeadm init过了,此时需要加个参数来忽略到这些:--ignore-preflight-errors=all
$ kubeadm init --config init-kubeadm.conf # 启动后可以根据提示执行下列命令,并记录john token
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 此处要记录下 join语句,如果join token忘记,则需要执行下边命令重新生成
$ kubeadm token create --print-join-command
kubeadm join 192.168.56.101:6443 --token abcdeff.zlo1o2t9i8e53whd --discovery-token-ca-cert-hash sha256:3613c3bc855b5d9e1555b99ebd21f48873d20353aeb8c2c64e73d8c7597d43f9 #--------------------以下为均一些状态查看命令,可以不执行--------------------
# 查看启动状态
[root@master01 kube]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 NotReady master 16m v1.18.2
[root@master01 kube]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
etcd-0 Healthy {"health":"true"}
# 查看具体初始化情况
$ kubectl get pods -n kube-system -0 wide
NAME READY STATUS RESTARTS AGE
coredns-546565776c-6kbxw 1/1 Running 2 16h
coredns-546565776c-bmfgz 1/1 Running 2 16h
etcd-master01 1/1 Running 9 16h
kube-apiserver-master01 1/1 Running 9 16h
kube-controller-manager-master01 1/1 Running 9 16h
kube-flannel-ds-amd64-8qphl 1/1 Running 3 14h
kube-flannel-ds-amd64-c8hrq 1/1 Running 3 13h
kube-flannel-ds-amd64-lcmhs 1/1 Running 2 16h
kube-proxy-6wv5w 1/1 Running 3 13h
kube-proxy-f4x2t 1/1 Running 4 16h
kube-proxy-m464b 1/1 Running 13 14h
kube-scheduler-master01 1/1 Running 10 16h
# 查看 kube-flannel-ds-amd64-c8hrq 状态
$ kubectl describe pod kube-flannel-ds-amd64-c8hrq -n kube-system

flannel网络配置

 #下载 配置文件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#下载
$ kubectl apply -f kube-flannel.yml # 问题解决:
# 此处如果没法下载配置文件kube-flannel.yml,raw.githubusercontent.com访问拒绝
# 通过IPAddress.com 查询真实IP,输入raw.githubusercontent.com查询到真实IP地址(例如:199.232.4.133)
# 添加到hosts中,
$ sudo vi /etc/hosts
199.232.4.133 raw.githubusercontent.com

配置node

node节点 初始化内容

#拷贝 master机器上 $HOME/.kube/config 到node节点上
scp $HOME/.kube/config root@node01:~/
scp $HOME/.kube/config root@node02:~/
#分别在node01和node02上执行下边命令
#不然执行kubectl 会报错
#error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
mkdir -p $HOME/.kube
sudo mv $HOME/config $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

节点注册方法1:直接使用命令节点注册【推荐】

#直接使用指令加入
$ kubeadm join 192.168.56.101:6443 --token abcdeff.zlo1o2t9i8e53whd --discovery-token-ca-cert-hash sha256:3613c3bc855b5d9e1555b99ebd21f48873d20353aeb8c2c64e73d8c7597d43f9
# token加入语句忘记了可以在master上使用下边命令进行生成
$ kubeadm token create --print-join-command

节点注册方法2:使用 join-config.yml 进行节点注册

# node 节点上生成 join-config.yml,并对主要的参数做修改
$ kubeadm config print join-defaults > join-config.yaml # join-config.yaml 内容
apiVersion: kubeadm.k8s.io/v1beta2
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
bootstrapToken:
apiServerEndpoint: kube-apiserver:6443 # 修改为master机器ip:port,192.168.56.101:6443
token: abcdef.0123456789abcdef # 修改为真实token
unsafeSkipCAVerification: true
timeout: 5m0s
tlsBootstrapToken: abcdef.0123456789abcdef # 修改为真实token
kind: JoinConfiguration
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: node01 # 根据实际节点名进行修改
taints: null #使用配置文件加入
$ kubeadm join --config=join-config.yaml

添加flannel网络

 #下载 配置文件
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#或者拷贝 master机器上的文件
scp root@master01:~/workspace/kube/kube-flannel.yml .
#下载
$ kubectl apply -f kube-flannel.yml # 查看节点添加状况
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master01 Ready master 16h v1.18.2
node01 Ready <none> 12h v1.18.2
node02 Ready <none> 12h v1.18.2

常见问题

node节点NotReady

# 查看pod 状态
$ kubectl get pods -n kube-system -0 wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-flannel-ds-amd64-gtlwv 1/1 Running 4 4h23m 192.168.56.101 master01 <none> <none>
kube-flannel-ds-amd64-m78z2 0/1 Init:0/1 0 3h13m 192.168.56.103 node02 <none> <none> # Init:0/1 错误,查看详情
$ kubectl describe pod kube-flannel-ds-amd64-m78z2 -n kube-system # 一般都是flannel的docker镜像没有下载成功
# 可以在node2上,执行docker images 查看是否有flannel镜像,如果没有手动下载

node节点删除重新加入

# -----重新加入注册
# 删除指定node
$ kubectl delete node node01
# 删除对应的配置文件以及证书
$ rm -rf /etc/kubernetes/kubelet.conf /etc/kubernetes/pki/ca.crt && systemctl restart docker kubelet
# 重新执行注册语句

节点注册语句

附:

k8s v1.18.2 centos7 下环境搭建的更多相关文章

  1. [Jenkins]CentOS7下Jenkins搭建

    最近在倒腾Kubernetes的一些东西,这次需要用到Jenkins来实现自动化构建.来讲一讲搭建的整个过程. Jenkins是什么 Jenkins提供了软件开发的持续集成服务.它运行在Servlet ...

  2. Redis的简单介绍及在Windows下环境搭建

    简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...

  3. Mac OS X下环境搭建 Sublime Text 2 环境变量配置 开发工具配置Golang (Go语言)

    Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 一.安装Golang的SDK 在官网http://golang.org/ 直接下载安装 ...

  4. opencv在vc2010 express下环境搭建方法笔记+空白通用工程(已编译测试通过)(提供下载)

    opencv在VC2010 express版本下的环境搭建可以参见下面的wiki,这里面讲的非常清楚. http://wiki.opencv.org.cn/index.php/VC_2010_Expr ...

  5. Linux下环境搭建(四)——jenkins+gitlab+jmeter实践

    经过前三篇博文的介绍,jenkins+gitlab+jmeter接口自动化的框架就搭建成功了,详细可见 Linux下环境搭建(一)——java.tomcat配置 Linux下环境搭建(二)——jenk ...

  6. Centos7 python3环境搭建 兼容python2.7

    Centos7 python3环境搭建 兼容python2.7 安装前提依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel ...

  7. Linux下环境搭建(一)——java、tomcat配置

    通过2个周末小憩的时间,终究是把linux环境下的jenkins+gitlab+jmeter框架给弄好了.jenkins的配置系列文章,可以翻看我以前的博文.此次,就将在linux下搭建环境的过程以博 ...

  8. LNMP小项目搭建,Centos7.6环境搭建Linux+nginx+mysql+php,wordpress个人博客的搭建(完整搭建步骤)

    一.LNMP搭建,基于nginx服务器搭建wordpress个人博客 准备环境:centos7.6环境下web服务器(nginx+php):主机名:web01,ip:192.168.248.172my ...

  9. RocketMQ在Windows平台下环境搭建

    一.  环境搭建 需要jdk1.6(以上) 64bit, maven, eclipse 二.  RocketMQ项目下载 项目地址:https://github.com/alibaba/RocketM ...

随机推荐

  1. 从NMEA0183到GNSS定位数据获取(一)原理篇

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述 GPS我们都知道,一种用来全球定位的系统,后来俄罗斯推出了格洛纳斯定位系统,中国推出了北斗定位,欧盟有 ...

  2. LCA算法——倍增

    概况 LCA(Lowest Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先. 实现过程 预处理:通过dfs遍历,记录每个节点到根节点的距离dis ...

  3. A - A Gifts Fixing

    t组询问,每次给出数列长度n 以及两个长度为n的数列{ai​}和{bi​}. 有三种操作:ai​−1, bi​−1以及ai​,bi​同时− 1 -1−1. 问最少多少步以后可以让两个数列变成常数数列. ...

  4. CF 1244 C - The Football Season

    C - The Football Season 先考虑求解 \[ x\times w + y\times d=p \] 若存在一组解 \[ \begin{cases} x_0\\ y_0 = kw + ...

  5. Codeforces Round #677 (Div. 3) G. Reducing Delivery Cost(dijkstra算法)

    题目链接:https://codeforces.com/contest/1433/problem/G 题解 跑 \(n\) 遍 \(dijkstra\) 得到任意两点间的距离,然后枚举哪一条边权为 \ ...

  6. Zabbix 监控项更多用法

    监控服务端口状态 配置 Zabbix 提供的检测器 配置自定义值映射 查看监控项数据状态 触发器配置 自定义监控项 TCP 11 种状态 TCP 11 种状态 LISTEN - 侦听来自远方TCP端口 ...

  7. kubernetes实战-交付dubbo服务到k8s集群(六)使用blue ocean流水线构建dubbo-consumer服务

    我们这里的dubbo-consumer是dubbo-demo-service的消费者: 我们之前已经在jenkins配置好了流水线,只需要填写参数就行了. 由于dubbo-consumer用的gite ...

  8. docker 支持systemctl start|stop|status等操作

    用docker运行centos7容器时候,无法使用systemctl,官方解释是centos7的一个bug,可以有修复的办法: 在docker run的时候,加上--privileged 并且cmd使 ...

  9. eclispe中解决OOM问题

     -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m 

  10. 2.安装Helm

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-06-25 13:54:15 星期二 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...