部署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
安装步骤:
具体步骤:
- master 和 node 先安装 kubelet, docker, kubeadm
- master 节点运行 kubeadm init 初始化命令
- 验证 master
- Node 节点使用 kubeadm 加入 k8s master
- 验证 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
查看组件当前状态
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
改成之前初始化时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
Master也变成了Ready状态
kubectl get nodes
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