你将学到什么

  • 如何部署k8s集群

网络拓扑

主机名 网络地址 角色
study 92.0.0.50(内网) 192.168.203.250/19(外网) Master
fnode 92.0.0.16(内网) 192.168.203.216/19(外网) Node
gnode 92.0.0.17(内网) 192.168.203.217/19(外网) Node

配置代理

安装shadowsocks

# yum install python-pip -y
# pip install shadowsocks

创建shadowsocks配置文件

# tee /etc/shadowsocks.json << EOF
{
"server":"45.78.XX.XX",
"server_port": XXXX,
"local_port": 1080,
"password":"XXXX",
"timeout":600,
"method":"rc4-md5"
}
EOF

启动shadowsocks客户端

# sslocal -c /etc/shadowsocks.json -d start
# ss -lntup|grep sslocal

所有节点配置

安装docker

# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
# yum makecache fast
# yum install -y docker-engine-1.12.0
# mkdir -p /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/https-proxy.conf << EOF
[Service]
Environment="ALL_PROXY=socks5://127.0.0.1:1080/" "NO_PROXY=localhost,127.0.0.1,docker.io,yanzhe919.mirror.aliyuncs.com,99nkhzdo.mirror.aliyuncs.com,*.aliyuncs.com,*.mirror.aliyuncs.com,registry.docker-cn.com,hub.c.163.com,hub-auth.c.163.com,"
EOF
# systemctl daemon-reload
# systemctl restart docker
### 测试下代理是否生效
# docker pull k8s.gcr.io/kube-apiserver-amd64:v1.10.3

安装kubeadm、kubelet 和 kubectl

# 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=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
proxy=socks5://127.0.0.1:1080
EOF
# setenforce 0
# yum install -y kubelet kubeadm kubectl
# cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl --system
# swapoff -a && sed -i '/swap/d' /etc/fstab
# systemctl enable kubelet && systemctl start kubelet

配置kubelet的cgroup驱动

# docker info | grep -i cgroup
# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
### 如果不相同
# sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# systemctl daemon-reload
# systemctl restart kubelet

Master节点配置

初始化Master节点

### 我们后面要创建Flannel网络,所以必须设置--pod-network-cidr,注意记住下面的输出,这个是用来添加其他node节点到集群的命令
# kubeadm init --apiserver-advertise-address=92.0.0.50 --pod-network-cidr=10.244.0.0/16
You can now join any number of machines by running the following on each node
as root:

   kubeadm join 92.0.0.50:6443 --token ro2pkh.3myahmoituohkbs7 --discovery-token-ca-cert-hash sha256:cbdfe4bf3cc4b15b0f47f3a8913638b0d3401de84c0e8cd21b647950b9e015fc

### 如果想用非root用户运行kubectl,则执行,否则跳过
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

### 如果已经是root用户
# export KUBECONFIG=/etc/kubernetes/admin.conf

安装pod网络

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

设置允许Pod调度到Master节点

# kubectl describe node k8s |grep Taints
Taints:             node-role.kubernetes.io/master:NoSchedule
# kubectl taint nodes --all node-role.kubernetes.io/master-
node "k8s" untainted
# kubectl describe node k8s |grep Taints
Taints:             <none>

Node节点配置

# kubeadm join 92.0.0.50:6443 --token ro2pkh.3myahmoituohkbs7 --discovery-token-ca-cert-hash sha256:cbdfe4bf3cc4b15b0f47f3a8913638b0d3401de84c0e8cd21b647950b9e015fc

问题处理

初始化报错

### 报错一(屏幕输出日志)
[preflight] Some fatal errors occurred:
    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    [ERROR Swap]: running with swap on is not supported. Please disable swap

### 解决办法
# tee -a /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl -p
# swapoff -a && sed -i '/swap/d' /etc/fstab

### 报错二(/var/log/message)
May 29 13:44:12 k8s kubelet: F0529 13:44:12.807374   23932 server.go:233] failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

### 解决办法(降低docker版本为1.12.0)
# docker info |grep -i cgroup
Cgroup Driver: cgroupfs
# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
# systemctl daemon-reload
# systemctl restart kubelet

kubectl命令执行失败

The connection to the server 172.16.196.2:8443 was refused - did you specify the right host or port?

### 解决办法
# export KUBECONFIG=/etc/kubernetes/admin.conf

kubelet服务告警

### systemctl status kubelet告警
cni.go:171] Unable to update cni config: No networks found in /etc/cni/net.d
May 29 06:30:28 fnode kubelet[4136]: E0529 06:30:28.935309    4136 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

### 解决办法
### 删除 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 的 KUBELET_NETWORK_ARGS,然后重启kubelet服务

参考文档

Installing kubeadm
Troubleshooting kubeadm
Using kubeadm to Create a Cluster
Kubernetes集群之清除集群

k8s学习笔记(一)的更多相关文章

  1. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  2. Docker&K8S学习笔记(一)—— Docker安装

    最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...

  3. K8S学习笔记之二进制的方式创建一个Kubernetes集群

    0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...

  4. k8s 学习笔记

    常用的kubectl命令   kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1   --image 指定镜像 - ...

  5. 【k8s学习笔记】使用 kubeadm 部署 v1.18.5 版本 Kubernetes集群

    说明 本文系搭建kubernetes v1.18.5 集群笔记,使用三台虚拟机作为 CentOS 测试机,安装kubeadm.kubelet.kubectl均使用yum安装,网络组件选用的是 flan ...

  6. k8s学习笔记(1)- 简单部署springboot应用

    前言:k8s全称kubernetes,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,关于更多的k8s知识,可自行学习 1.k8 ...

  7. Docker 与 K8S学习笔记(二十三)—— Kubernetes集群搭建

    小伙伴们,好久不见,这几个月实在太忙,所以一直没有更新,今天刚好有空,咱们继续k8s的学习,由于我们后面需要深入学习Pod的调度,所以我们原先使用MiniKube搭建的实验环境就不能满足我们的需求了, ...

  8. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

  9. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  10. K8S学习笔记之ETCD启动失败注意事项

    最近搭建K8S集群遇到ETCD的报错,报错信息如下,一定要关闭防火墙.iptables和SELINUX,三个都要关闭!! Mar 26 20:39:24 k8s-m1 etcd[6437]: heal ...

随机推荐

  1. 腾讯云搭建php环境

    1.安装搭建论坛必要的软件 apache  php  mysql CentOS系统我们可以直接使用 yum install 的方式进行软件安装,腾讯云有提供软件安装源,是同步CentOS官方的安装源, ...

  2. SE新手游操控创新:一个按键=五个技能

    转自:http://www.gamelook.com.cn/2015/01/201299 GameLook报道 / 日本游戏厂商一向擅长搞发明创造,除了诞生了各种烧脑奇葩游戏以外,日本主流手机游戏的核 ...

  3. ceph 对接openstack liberty

    Ceph 准备工作 官方文档:http://docs.ceph.com/docs/master/rbd/rbd-openstack/ 官方中文文档:http://docs.ceph.org.cn/rb ...

  4. http协议Keep-Alive

    Keep-Alive 是什么? 概观 默认情况下,HTTP链接通常在请求完成之后关闭.这意味着服务端在完成响应的交付之后便关闭了TCP链接.为了让链接保持打开,来满足多请求,可以使用keep-aliv ...

  5. windows Server 2008各版本有何区别?

    windows Server 2008有几个版本,先一一列出来把: Windows Server 2008 Standard Edition     (标准版) Windows Server 2008 ...

  6. JS,JQUERY 常用笔记

    JSON.parse() 转成数组对象 JSON.stringify() 转成JSON字符串

  7. pandas+mysql+excel 数据处理

    mysql  建表 join 建索引,不然查询慢 注意时间类型是否update后会被刷新 设计逻辑删除 enable   ,  不要delete null,字符串   数字运算用函数  ifnull( ...

  8. Asp.net Web Application 打开 SharePoint 2010 Site 错误 The Web application at could not be found

    解决办法如下: 1. 修改项目的.net framework 为3.5 2. Application Pool 选用 Sharepoint App pool 3. 修改 web.config如下: & ...

  9. 【原创】7. MYSQL++中的查询结果获取(各种Result类型)

    在本节中,我将首先介绍MYSQL++中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释. 1. MYSQL++ ...

  10. 【转发】徐汉彬:Web系统大规模并发——电商秒杀与抢购

    徐汉彬:Web系统大规模并发——电商秒杀与抢购 发表于2014-12-02 09:30| 73110次阅读| 来源CSDN| 114 条评论| 作者徐汉彬 问底徐汉彬大数据 摘要:电商的秒杀和抢购,从 ...