kubeadm安装Kubernetes 1.15 实践
一、环境准备(在全部设备上进行)
3 台 centos7.5 服务器,网络使用 Calico。
IP地址 | 节点角色 | CPU | 内存 | Hostname |
---|---|---|---|---|
10.0.1.45 | master | 2c | 4G | k8s-master |
10.0.1.20 | node | 2c | 4G | node1 |
10.0.1.18 | node | 2c | 4G | node2 |
- 设置主机名 hostname。
hostnamectl set-hostname k8s-master
对应上面表格的Hostname,node1与node2同理。
- 编辑3台设备的 host 文件,添加域名解析。
cat <<EOF >>/etc/hosts
10.0.1.45 k8s-master
10.0.1.20 node1
10.0.1.18 node2
EOF
- 关闭防火墙、selinux 和 swap
systemctl stop firewalld
systemctl disable firewalld
禁用SELINUX:
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
关闭swap
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
- 配置内核参数,将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
- kube-proxy 开启 ipvs。
由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
创建 /etc/sysconfig/modules/ipvs.modules 文件,保证在节点重启后能自动加载所需模块。 使用 lsmod | grep -e ip_vs -e nf_conntrack_ipv4 命令查看是否已经正确加载所需的内核模块。
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- 安装docker
Kubernetes 1.15当前支持的 docker 版本列表是1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。 这里在各节点安装 docker 的18.09.7版本。
yum install -y yum-utils device-mapper-persistent-data lvm2 &&\
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &&\
yum install docker-ce-18.09.7-3.el7 -y
- 修改docker cgroup driver为systemd
根据文档CRI installation中的内容,对于使用 systemd 作为init system 的 Linux 的发行版,使用 systemd 作为docker 的 cgroup driver 可以确保服务器节点在资源紧张的情况更加稳定,因此这里修改各个节点上 docker 的 cgroup driver 为 systemd。
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
#重启docker
systemctl restart docker
#验证
docker info | grep Cgroup
Cgroup Driver: systemd
- 安装 Kubernetes 工具
配置国内 yum 源
yum install -y wget
mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all && yum makecache
配置国内 Kubernetes 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm、kubelet、kubectl
yum install -y kubeadm kubelet kubectl
systemctl enable kubelet
二、k8s-master 节点配置
1.使用 kubeadm 初始化 Kubernetes 集群
kubeadm init --kubernetes-version=1.15.0 \
--apiserver-advertise-address=10.0.1.45 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
参数含义:
--apiserver-advertise-address=10.0.1.45
#定义api server地址就是master本机IP地址。
--image-repository registry.aliyuncs.com/google_containers
#由于kubeadm默认从官网k8s.grc.io下载镜像,以防网络原因,改为阿里云镜像仓库地址。
--pod-network-cidr=10.244.0.0/16
#定义POD网段为: 10.244.0.0/16。
集群初始化成功后返回如下信息:
join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4 \
--discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb
- 配置 kubectl 工具
mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
#查看集群状态,确认所有组件都处于healthy状态
kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
集群初始化如果遇到问题,可以使用下面的命令进行清理(慎用):
kubeadm reset
- 安装 Calico v3.8 网络服务
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
#由于默认的 calico.yaml 的 Pod 网段为192.168.0.0/16,打开 calico.yaml 文件找到这行改为10.244.0.0/16。
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
kubectl apply -f ./calico.yaml
#查看创建情况,等待每个 pod 的 STATUS 变为 Running。
watch kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-6ff88bf6d4-tgtzb 1/1 Running 0 2m45s
kube-system calico-node-24h85 1/1 Running 0 2m43s
kube-system coredns-846jhw23g9-9af73 1/1 Running 0 4m5s
kube-system coredns-846jhw23g9-hmswk 1/1 Running 0 4m5s
kube-system etcd-jbaker-1 1/1 Running 0 6m22s
kube-system kube-apiserver-jbaker-1 1/1 Running 0 6m12s
kube-system kube-controller-manager-jbaker-1 1/1 Running 0 6m16s
kube-system kube-proxy-8fzp2 1/1 Running 0 5m16s
kube-system kube-scheduler-jbaker-1 1/1 Running 0 5m41s
4 设置环境变量
cat > ~/.bash_profile << EOF
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
三、node 节点配置(在所有node节点上操作)
添加 node 节点,执行如下命令,使所有 node 节点加入 Kubernetes 集群。
kubeadm join 10.0.1.45:6443 --token bybzi7.7201j7f7mtiwtmg4 \
--discovery-token-ca-cert-hash sha256:9186c9b0709af151079bcb034f1771f10f382341bfb45024e5d0c541a055f2eb
成功后,在 k8s-master 中输入命令检查集群状态。
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 36m v1.15.0
node1 Ready <none> 3m10h v1.15.0
node2 Ready <none> 3m v1.15.0
四、部署 Dashboard(在k8s-master上进行操作)
- 下载 Dashboard 的 yaml 文件。
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
#修改 yaml 文件中使用的源镜像。
sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml
#使用 NodePort 模式映射 30001 至 k8s 所有宿主机的 30001 端口上。
sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml
- 部署 Dashboard。
kubectl apply -f kubernetes-dashboard.yaml
- 创建完成后,检查相关服务运行状态。
kubectl get deployment kubernetes-dashboard -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-dashboard 1/1 1 1 3m
kubectl get services -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 40m
kubernetes-dashboard NodePort 10.99.190.175 <none> 443:30001/TCP 4m
在 Firefox 浏览器输入 Dashboard 访问地址: https://10.0.1.45:30001
注: 由于 Dashborad 的认证原因,谷歌浏览器和 IE 可能无法打开,请使用 Firefox 浏览器。查看访问 Dashboard 的认证令牌。
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 登录 Dashboard。
五 创建
1 使用命令创建pod
[root@k8s-master mainfests]# kubectl run nginx-deploy --image=nginx:1.14 --port=80 --replicas=3
[root@k8s-master mainfests]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deploy-bc9ff65dd-6kvfg 1/1 Running 0 16h
nginx-deploy-bc9ff65dd-ffcl5 1/1 Running 0 16h
nginx-deploy-bc9ff65dd-pvjzt 1/1 Running 0 17h
2 使用yaml创建pod
[root@k8s-master mainfests]# cat pod-demo.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: nginx:1.14
- name: busybox
image: busybox:latest
command:
- "bin/sh"
- "-c"
- "sleep 3600"
[root@k8s-master mainfests]# kubectl create -f pod-demo.yml
创建一个serviceaccount,使其token只能进入default空间
kubectl create serviceaccount def-ns-admin -n default
kubectl create rolebinding def-ns-admin --clusterrole=admin --serviceaccount=default:def-ns-admin
将token转换为config文件
ADMIN_TOKON=$(kubectl get secret `kubectl get secret | awk '/^dashboard-admin-01/{print $1}'` -o jsonpath={.data.token} | base64 -d)
kubectl config set-credentials default --token=$ADMIN_TOKON --kubeconfig=/root/admin-test.conf
kubectl config set-context default@kubernetes --cluster=kubernetes --user=def-ns-admin --kubeconfig=/root/admin-test.conf
kubectl config use-context default@kubernetes --kubeconfig=/root/admin-test.conf
kubeadm安装Kubernetes 1.15 实践的更多相关文章
- 使用kubeadm 安装 kubernetes 1.15.1
简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ...
- 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践
前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...
- Centos 使用kubeadm安装Kubernetes 1.15.3
本来没打算搞这个文章的,第一里面有瑕疵(没搞定的地方),第二在我的Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 也有安装,第三 和社区的问文章比较雷同 https:// ...
- 使用kubeadm安装Kubernetes 1.15.3 并开启 ipvs
一.安装前准备 机器列表 主机名 IP node-1(master) 1.1.1.101 node-2(node) 1.1.1.102 node-3(node) 1.1.1.103 设置时区 cp / ...
- Kubeadm安装Kubernetes 1.15.1
一.实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.198.200 >=2c >=2G master 192.168.198.201 >=2c ...
- 使用kubeadm安装kubernetes 1.15
1.主机准备篇 使用vmware Workstation 10创建一台虚拟机,配置为2C/2G/50G,操作系统为CentOS Linux release 7.6.1810 (Core). IP地址为 ...
- Centos7 使用 kubeadm 安装Kubernetes 1.13.3
目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...
- 使用 kubeadm 安装 kubernetes v1.16.0
近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系 统:CentOS Linux release 7.6 Docke ...
- kubeadm安装kubernetes V1.11.1 集群
之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...
随机推荐
- leetcode题解(持续更新)
leetcode题解 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- 2019-7-29-C#-在基类定义好方法让子类继承接口就能实现
title author date CreateTime categories C# 在基类定义好方法让子类继承接口就能实现 lindexi 2019-07-29 09:57:49 +0800 201 ...
- 编译 GNU binutils
重新以 arm 用户登陆,让新设置的环境变量起作用. [arm@localhost arm]#su arm [arm@localhost arm]#cd ${SRC} [arm@localhost t ...
- 7_API调用
0 查看 kifastcallentry 里面具体怎么调用 首先是 切换了 fs 为kpcr的选择子 然后 构造了 一个trap frame(保存3环-->0环 切换的上下文:如果0环不使用就没 ...
- ionic js 加载动画 ionSpinner 提供了许多种旋转加载的动画图标。当你的界面加载时,你就可以呈现给用户相应的加载图标。 该图标采用的是SVG
ionic 加载动画 ion-spinner ionSpinner 提供了许多种旋转加载的动画图标.当你的界面加载时,你就可以呈现给用户相应的加载图标. 该图标采用的是SVG. 用法 <ion- ...
- heartbeat 高可用
转载来自 http://www.cnblogs.com/liwei0526vip/p/6391833.html 使用HeartBeat实现高可用HA的配置过程详解 一.写在前面 HA即(high av ...
- Linux 添加时间
添加在指令后面 `date +%Y%m%d%H%M`注意date和+之间一定要有空格 ps: %% 一个文字的 % %a 当前locale 的星期名缩写(例如: 日,代表星期日) %A ...
- 几个dp的陈年老题
真 陈年老题 都是基础的dp优化 主要是展现我基础薄弱,菜得抠脚 1.四边形不等式 四边形不等式:w[i][j]+w[i+1][j+1]<=w[i+1][j]+w[i][j+1] 对于f[i][ ...
- manacher/马拉车常用用法一览
因为manacher算法把原来的字符串扩大了两倍,因此在应用时许多二级结论都非常不直观,现场推出来很麻烦,因此笔者在此做个简单整理,如果发现有错误或者有常用的我没有涉及到的,恳请在下方评论区指出,我会 ...
- debezium监听数据库变化Date类型数据的还原
debezium是一个开源的分布式CDC系统,支持对接各种数据源,将数据源中已持久化的数据变更捕获后写入消息队列. 当数据源是mysql时,debezium通过BINLOG实时捕获已提交事务数据. 在 ...