原地址参考github

一、环境准备(在全部设备上进行)

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
  1. 设置主机名 hostname。
hostnamectl set-hostname k8s-master

对应上面表格的Hostname,node1与node2同理。

  1. 编辑3台设备的 host 文件,添加域名解析。
cat <<EOF >>/etc/hosts
10.0.1.45 k8s-master
10.0.1.20 node1
10.0.1.18 node2
EOF
  1. 关闭防火墙、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
  1. 配置内核参数,将桥接的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
  1. 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
  1. 安装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
  1. 修改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
  1. 安装 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
  1. 配置 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
  1. 安装 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上进行操作)

  1. 下载 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
  1. 部署 Dashboard。
kubectl apply -f kubernetes-dashboard.yaml
  1. 创建完成后,检查相关服务运行状态。
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
  1. 在 Firefox 浏览器输入 Dashboard 访问地址: https://10.0.1.45:30001

    注: 由于 Dashborad 的认证原因,谷歌浏览器和 IE 可能无法打开,请使用 Firefox 浏览器。

  2. 查看访问 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}')
  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 实践的更多相关文章

  1. 使用kubeadm 安装 kubernetes 1.15.1

    简介: Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿.kubernetes1.5版本以及之前,安装 ...

  2. 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践

    前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...

  3. Centos 使用kubeadm安装Kubernetes 1.15.3

    本来没打算搞这个文章的,第一里面有瑕疵(没搞定的地方),第二在我的Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 也有安装,第三 和社区的问文章比较雷同 https:// ...

  4. 使用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 / ...

  5. Kubeadm安装Kubernetes 1.15.1

    一.实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.198.200 >=2c >=2G master 192.168.198.201 >=2c ...

  6. 使用kubeadm安装kubernetes 1.15

    1.主机准备篇 使用vmware Workstation 10创建一台虚拟机,配置为2C/2G/50G,操作系统为CentOS Linux release 7.6.1810 (Core). IP地址为 ...

  7. Centos7 使用 kubeadm 安装Kubernetes 1.13.3

    目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...

  8. 使用 kubeadm 安装 kubernetes v1.16.0

    近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系           统:CentOS Linux release 7.6 Docke ...

  9. kubeadm安装kubernetes V1.11.1 集群

    之前测试了离线环境下使用二进制方法安装配置Kubernetes集群的方法,安装的过程中听说 kubeadm 安装配置集群更加方便,因此试着折腾了一下.安装过程中,也有一些坑,相对来说操作上要比二进制方 ...

随机推荐

  1. Python3 多进程编程 - 学习笔记

    Python3 多进程编程(Multiprocess programming) 为什么使用多进程 具体用法 Python多线程的通信 进程对列Queue 生产者消费者问题 JoinableQueue ...

  2. 调用存储过程取到数据通过NPOI存到Excel中

        //调用  public ActionResult GenerateExcel() {             DataTable headerTable = new DataTable(); ...

  3. echarts数据变了不重新渲染,以及重新渲染了前后数据会重叠渲染的问题

    1.echarts数据变了但是视图不重新渲染 新建Chart.vue文件 <template>  <p :id="id" :style="style&q ...

  4. 2018-10-8-3分钟教你搭建-gitea-在-Centos-服务器

    title author date CreateTime categories 3分钟教你搭建 gitea 在 Centos 服务器 lindexi 2018-10-08 09:54:39 +0800 ...

  5. mac下xampp+vscode进行php程序调试

    最近折腾公司的官网,是 php 做的,搭建调试环境做个记录,我用的是 mac 机. 1.下载最新的xampp,我的版本是XAMPP for OS X 5.6.31: 2.找到 php.ini,/App ...

  6. springmvc常用知识总结,不定期更新

    1.@Controller 注解到类名上,表示该类是控制器. 2.@RequestMapping("/xxxx") 可以放在类名/方法名之上,表示访问请求该方法时的映射url.如果 ...

  7. 传统的dom的渲染方式

    DOM渲染的过程大致分为三个阶段: 后端渲染 前端渲染 独立DOM渲染(前后端相结合渲染) 1.后端渲染:DOM树的生成完全是在后端服务器中完成的,后端服务器的程序会把需要的数据拼合成一个类似于前端D ...

  8. 牛客多校第五场 G subsequence 1 最长公共子序列/组合数

    题意: 给定两个由数字组成的序列s,t,找出s所有数值大于t的子序列.注意不是字典序大. 题解: 首先特判s比t短或一样长的情况. 当s比t长时,直接用组合数计算s不以0开头的,长度大于t的所有子序列 ...

  9. truncate和delete的区别

    TRUNCATE 命令用法 语法    TRUNCATE TABLE name 参数  name 是要截断的表的名称或要删除其全部行的表的名称. 注释 TRUNCATE TABLE 在功能上与不带 W ...

  10. django2 rest api

    版本django 2.2.3,我用的社区版 1.安装django:pycharm——Settings——Project Interpreter——选择你要的Python解释器版本——点击右侧的加号,输 ...