kubeadm部署k8s.

部署kubernetes集群
大致分为以下几步:

一)环境准备

二)在Master及Node安装Docker,启动Docker服务

三)在Master及Node安装kubelet及kubeadm,启动kubelet服务

四)在Master节点上通过kubeadm init初始化集群

五)在集群上部署网络附件,如flannel 或 Calico

六)在Node通过kubeadm join加入初始化后的Master

主机名解析

vim /etc/hosts
192.168.200.169 master
192.168.200.167 node1
192.168.200.172 node2
所有开启转发功能
root@node2:~# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
vm.swappiness=0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
root@node2:~# sysctl -p

配置阿里yum源

sudo vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

所有机器都做这些操作

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
更新
sudo apt-get -y update

禁用交换分区swap

swapoff -a
并且注释/etc/fstab所有与swap相关的行
#/swap.img      none    swap    sw      0       0

关闭防火墙服务和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

查找Docker-CE的版本:

# apt-cache madison docker-ce
docker-ce | 5:19.03.2~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:19.03.1~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
...

安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.1ce-0ubuntu-xenial)

sudo apt install docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic
sudo apt install docker-ce=5:18.09.9~3-0~ubuntu-bionic

验证版本

# docker version
Client:
 Version:           18.09.9
 API version:       1.39
 Go version:        go1.11.13
 Git commit:        039a7df9ba
 Built:             Wed Sep  4 16:57:28 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.9
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.11.13
  Git commit:       039a7df
  Built:            Wed Sep  4 16:19:38 2019
  OS/Arch:          linux/amd64
  Experimental:     false

验证docker信息

root@node1:~# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.9
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
WARNING: No swap limit support
最后一行有个WARNING: WARNING: No swap limit support 
解决方法:
sudo vim /etc/default/grub
在GRUB_CMDLINE_LINUX=""这行加上
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
更新下grub,然后重启
sudo update-grub
reboot

2. 配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://lcnmouck.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装步骤:
具体步骤:

  1. master 和 node 先安装 kubelet, docker, kubeadm
  2. master 节点运行 kubeadm init 初始化命令
  3. 验证 master
  4. Node 节点使用 kubeadm 加入 k8s master
  5. 验证 node
    6. 启动容器测试访问
    Master节点上安装
kubernetes
Debian / Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update
apt-get install -y kubelet kubeadm kubectl
root@master:/etc/apt# apt-get purge -y kubelet kubeadm kubectl
卸载安装包,注意不要安装最新版本的
root@master:/etc/apt# apt autoremove

安装kubelet、kubeadm、kubectl

root@master:/etc/apt# apt install kubeadm=1.15.3-00 kubelet=1.15.3-00 kubectl=1.15.3-00 -y
查看版本
root@master:/etc/apt# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3"
配置忽略swap
添加到第四行之后
  5 Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

主机同步

apt  install chrony -y
systemctl start chronyd
systemctl enable chronyd

master初始化

1. 检查所需要的镜像
root@master:/etc/apt# kubeadm config images list --kubernetes-version v1.15.3
k8s.gcr.io/kube-apiserver:v1.15.3
k8s.gcr.io/kube-controller-manager:v1.15.3
k8s.gcr.io/kube-scheduler:v1.15.3
k8s.gcr.io/kube-proxy:v1.15.3
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

替换成国内镜像地址
root@master:/etc/apt# vim image-download.sh 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.15.3
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.3.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.3.1
添加执行权限
root@master:/etc/apt# chmod +x image-download.sh 
下载镜像
bash images-download.sh
查看下载完的镜像

初始化:

kubeadm init \
    --apiserver-advertise-address=0.0.0.0 \
    --apiserver-bind-port=6443 \
    --kubernetes-version=v1.15.3 \
    --pod-network-cidr=10.10.0.0/16 \
    --service-cidr=172.31.0.0/16 \
    --service-dns-domain=jibill.local \
    --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
    --ignore-preflight-errors=swap \
  --token-ttl=0

参数介绍

--apiserver-advertise-address string #API Server 将要监听的监听地址, 为本机 IP
--apiserver-bind-port int32 #API Server 绑定的端口,默认为 6443,
--apiserver-cert-extra-sans stringSlice #可选的证书额外信息,用于指定 API Server
的服务器证书。可以是 IP 地址也可以是 DNS 名称。
--cert-dir string #证书的存储路径,缺省路径为 /etc/kubernetes/pki
--config string #kubeadm 配置文件的路径
--ignore-preflight-errors strings #可以忽略检查过程 中出现的错误信息,比如忽略
swap,如果为 all 就忽略所有
--image-repository string #设置一个镜像仓库,默认为 k8s.gcr.io
--kubernetes-version string #选择 k8s 版本,默认为 stable-1
--node-name string #指定 node 名称
--pod-network-cidr #设置 pod ip 地址范围
--service-cidr #设置 service 网络地址范围
--service-dns-domain string #设置 k8s 内部域名,默认为 cluster.local, 会有相应的
DNS 服务(kube-dns/coredns)解析生成的域名记录。
--skip-certificate-key-print #不打印用于加密的 key 信息
--skip-phases strings #要跳过哪些阶段
--skip-token-print #跳过打印 token 信息
--token #指定 token
--token-ttl #指定 token 过期时间,默认为 24 小时, 0 为永不过期
--upload-certs #更新证书
#全局选项
--log-file string #日志路径
--log-file-max-size uint #设置日志文件的最大大小,单位为兆,默认为 1800, 0 为
没有限制 --rootfs #宿主机的根路径,也就是使用绝对路径
--skip-headers #为 true,在 log 日志里面不显示消息的头部信息
--skip-log-headers #为 true 在日志文件里面不记录头部信息

初始化成功

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.200.169:6443 --token jmoytv.rxkoonokj7jw60hb \
    --discovery-token-ca-cert-hash sha256:d1bb99086ee78919601af2e127a3e4905ca544d651e47d123cbd78b4c52c57b7 

注意最后一行的kubeadm join命令,后面在加入node节点时要用

master 配置 kube 证书

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果你是root执行,chown命令可以不执行。当然执行也无所谓
查看组件当前状态

kubectl get cs
kubectl get nodes

查看组件当前状态

image.png
root@master:/etc/apt# kubectl get pods --all-namespaces

https://github.com/coreos/flannel/releases
镜像下载网站
以下有两种方法下载flannel镜像建议第二种
第一种root@master:/etc/apt# docker pull quay.io/coreos/flannel:v0.11.0-amd64
其他node节点也倒入镜像
第二种root@master:/etc/apt# docker load -i flannel_v0.11.0-amd64.tar.gz
倒入镜像

安装网络附件
k8s提供Pod网络的插件有很多,最为流行的flannel 和 Calico

安装flannel
下载flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

修改配置
vim kube-flannel.yml


image.png

改成之前初始化时pod-network-cidr选项对应的值
部署
kubectl apply -f kube-flannel.yml
root@master:~# kubectl delete -f kube-flannel.yml
删除错误flannel的配置文件,
kubectl apply -f kube-flannel.yml
再次执行一下
查看其他节点的配置,是否更新
root@node1:~# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.10.0.0/16
FLANNEL_SUBNET=10.10.2.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

Bash

部署flannel

关于fannel的官方介绍:https://github.com/coreos/flannel/

root@master:~# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

稍等一会,查看是否下载flannel镜像
docker images


image.png

Master也变成了Ready状态
kubectl get nodes


image.png
root@master:/etc/apt# kubectl get pods --all-namespaces
查看状态对的
NAMESPACE     NAME                             READY   STATUS    RESTARTS   AGE
kube-system   coredns-6967fb4995-cfl67         1/1     Running   0          74m
kube-system   coredns-6967fb4995-k4b4c         1/1     Running   0          74m
kube-system   etcd-master                      1/1     Running   0          73m
kube-system   kube-apiserver-master            1/1     Running   0          73m
kube-system   kube-controller-manager-master   1/1     Running   0          73m
kube-system   kube-flannel-ds-amd64-slm82      1/1     Running   0          10m
kube-system   kube-proxy-vxnql                 1/1     Running   0          74m
kube-system   kube-scheduler-master            1/1     Running   0          73m

添加Node节点到集群中
在添加之前需要
配置环境(见一、)
安装docker(见二、)
安装kubelet(见三、)
完成上面后,再继续往下
其他node节点安装命令

apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF  
apt-get update
apt install kubeadm=1.15.3-00 kubelet=1.15.3-00 kubectl=1.15.3-00 -y
添加Node节点到集群中
kubeadm join 192.168.200.169:6443 --token jmoytv.rxkoonokj7jw60hb     --discovery-token-ca-cert-hash sha256:d1bb99086ee78919601af2e127a3e4905ca544d651e47d123cbd78b4c52c57b7 

主节点查看node信息,

root@master:/etc/apt# kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   95m     v1.15.3
node1    Ready    <none>   7m36s   v1.15.3
node2    Ready    <none>   3m40s   v1.15.3

k8s 创建容器并测试
创建测试容器, 测试网络连接(Master上执行)

root@master:/etc/apt# kubectl run net-test1 --image=alpine --replicas=2 sleep 360000

查看pod状态

root@master:/etc/apt# kubectl get pods
NAME                         READY   STATUS    RESTARTS   AGE
net-test1-8596df4559-bvbvs   1/1     Running   0          58s
net-test1-8596df4559-hkzkk   1/1     Running   0          58s

查看更详细的信息,一个运行在node1一个在node2上

root@master:/etc/apt# kubectl get pods -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP          NODE    NOMINATED NODE   READINESS GATES
net-test1-8596df4559-bvbvs   1/1     Running   0          2m33s   10.10.2.2   node1   <none>           <none>
net-test1-8596df4559-hkzkk   1/1     Running   0          2m33s   10.10.3.2   node2   <none>           <none>

root@master:~# kubectl exec -it net-test1-8596df4559-dslx7  sh
进入pod,然后ping百度试下
/ # ping www.baidu.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352