kubeadm快速搭建k8s集群(kubernetes简化安装工具kubeadm)
目录1、环境准备2、系统配置2.1、设置主机名2.2、免密登录2.3、安装依赖包【3台机器都执行】2.4、配置yum源【3台机器都执行】2.5、关闭防火墙、selinux和swap【3台机器都执行】2.6、配置内核参数【3台机器都执行】2.7、执行清理和更新【3台机器都执行】3、安装docker4、使用kubeadm部署k8s集群4.1、安装kubeadm、kubelet和kubectl...
目录
2.5、关闭防火墙、selinux和swap【3台机器都执行】
本文参考老师的文档:E:\meWork\study\project\subject-3\subject-3-k8s\专题三-Kubernetes_学习文档-N.docx
文档中的“3.3.kubernetes 简化安装工具 kubeadm”
【注意事项:很多命令只有复制word原文档的命令,粘贴、执行才不会报错,我从网页、notepad++,上复制粘贴、执行都报错,可能是网页、notepad++有什么特殊的符号,centos不认识】,我重新安装了3次才成功
kubeadm是Kubernetes的官方提供用于快速安装Kubernetes集群的工具。
Kubernetes文档:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
官网参考资料:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/
1、环境准备
IP地址 | 节点角色 | CPU | Memory | Hostname |
| master | >= 2c | >= 2G | Master |
| worker | >= 2c | >= 2G | node1 |
| worker | >= 2c | >= 2G | Node2 |
至少需要2个CPU,否则在执行 “4.3 ”初始化master节点节点时,就会报错
2、系统配置
2.1、设置主机名
1、设置主机名
192.168.0.35机器执行:hostnamectl set-hostname master
192.168.0.36机器执行:hostnamectl set-hostname node1
192.168.0.37机器执行:hostnamectl set-hostname node2
2、编辑/etc/hosts文件,添加域名解析【3台机器都执行】
cat <<EOF >>/etc/hosts
192.168.0.35 master
192.168.0.36 node1
192.168.0.37 node2
EOF
2.2、免密登录
设置master可以无密码登录所有节点的root账户
截图参考的“3.2.2 K8S入门”中的“5.2、设置master可以无密码登录所有节点的root账户”:https://blog.csdn.net/pyl574069214/article/details/105594013#%E2%80%8B%C2%A0%C2%A0%20%C2%A0%205.2%E3%80%81%E8%AE%BE%E7%BD%AEmaster%E5%8F%AF%E4%BB%A5%E6%97%A0%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E7%9A%84root%E8%B4%A6%E6%88%B7
1、创建一个rsa的密钥(一路按回车到最后):ssh-keygen -t rsa
2、将公钥文件放到master的root账户下:ssh-copy-id root@master
3、将公钥文件放到node1的root账户下:ssh-copy-id root@node1
4、将公钥文件放到node2的root账户下:ssh-copy-id root@node2
5、在master节点上直接执行:ssh node1,就可以登录到node1节点,如下图:
2.3、安装依赖包【3台机器都执行】
ipvs依赖 ipset;ntp保证各机器系统时间同步
安装依赖包:
yum install -y epel-release
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget
/usr/sbin/modprobe ip_vs
2.4、配置yum源【3台机器都执行】
1、配置阿里软件源(base和epel):
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup #如果没有epel-testing.repo,可以不执行此行
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、配置国内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
3、配置docker源:
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
查看正在使用yum源:yum repolist
2.5、关闭防火墙、selinux和swap【3台机器都执行】
1、关闭防火墙,清理防火墙规则,设置默认转发策略:
systemctl stop firewalld &&
systemctl disable firewalld &&
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat &&
iptables -P FORWARD ACCEPT
2、关闭SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
3、关闭swap分区
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2.6、配置内核参数【3台机器都执行】
1、由于ipvs已经在内核中,所以为kube-proxy开启ipvs的前提需要加载ip_vs_rr内核模块
2、br_netfilter在执行此步骤之前,请确保已加载模块
将桥接的IPv4流量传递到iptables的链,swappiness参数调整:
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
EOF
modprobe ip_vs_rr
modprobe br_netfilter
sysctl --system
2.7、执行清理和更新【3台机器都执行】
(第一次需要比较久的时间):yum clean all&& yum makecache && yum update -y
3、安装docker
查看最新的docker版本:
yum list docker-ce.x86_64 --showduplicates | sort -r
yum list docker-ce-cli.x86_64 --showduplicates |sort -r
【3台机器都执行】1、安装docker:yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7
2、docker加入到开机启动:systemctl enable docker && systemctl start docker
3、docker版本查看:docker version
配置一个docker加速【3台机器都执行】
1、创建或修改/etc/docker/daemon.json:
【只有复制word原文档的命令,粘贴、执行才不会报错,我从网页、notepad++,上复制粘贴、执行都报错,可能是网页、notepad++有什么特殊的符号,centos不认识】
## Create /etc/docker directory.
mkdir -p /etc/docker
# Setup daemon.
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
EOF
# Restart Docker
systemctl daemon-reload && systemctl restart docker
(如果装错了
1、卸载旧版本:yum remove docker docker-common docker-selinux docker-engine
2、删除daemon.json文件:rm -f /etc/docker/daemon.json
3、查询docker安装过的包:yum list installed | grep docker
4、删除安装包:yum remove docker-ce.x86_64 docker-ce-cli.x86_64
5、删除容器:rm -rf /var/lib/docker
)
直接启动docker(如果启动失败,可以直接看到错误信息):dockerd
2、可以通过docker info查看是否配置成功
确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT:iptables -nvL
如果不是,再执行一下“关闭防火墙,清理防火墙规则,设置默认转发策略”的命令。
4、使用kubeadm部署k8s集群
4.1、安装kubeadm、kubelet和kubectl
【3台机器都需要安装】如下3个软件包
Kubelet:负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
Kubeadm:是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
Kubectl:是Kubernetes集群管理工具
1、查看可用版本:
yum list --showduplicates | grep 'kubeadm\|kubectl\|kubelet'
2、安装 kubeadm1.15.0, kubelet1.15.0 和 kubectl1.15.0【3台机器都执行】
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 --disableexcludes=kubernetes
3、先设置开机启动(此时还不能启动 kubelet)【3台机器都执行】
systemctl enable --now kubelet
从安装结果可以看出还安装了cri-tools, kubernetes-cni, socat三个依赖:
1、socat是kubelet的依赖
2、cri-tools是CRI(Container Runtime Interface)容器运行时接口的命令行工具
4.2、配置kubeadm
查看kubelet安装了哪些文件:rpm -ql kubelet
修改/etc/sysconfig/kubelet【3台机器都执行】
sed -i "s/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS=\"--fail-swap-on=false\"/" /etc/sysconfig/kubelet
cat /etc/sysconfig/kubelet
【在master节点执行即可】
1、创建并修改配置:
# 导出配置文件
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
2、修改kubeadm.yml如下内容
vim kubeadm.yml
#1、修改为主节点IP【找到advertiseAddress】
advertiseAddress: 192.168.0.35
#2、【找到controllerManager】在前面加入一行
controlPlaneEndpoint: ""
#3、国内不能访问Google,修改为阿里云【找到imageRepository】
imageRepository: registry.aliyuncs.com/google_containers
#4、修改版本号【找到kubernetesVersion】
kubernetesVersion: v1.15.0
#5、配置成Flannel的默认网段【找到dnsDomain】在dnsDomain后面加入一行
podSubnet: "10.244.0.0/16"
#6、末尾加入如下行
---
# 开启 IPVS 模式
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
少了中划线。就会报如下错误:
3、查看和拉取镜像
# 查看所需镜像列表
kubeadm config images list --config kubeadm.yml
# 拉取镜像【3台机器都执行】【需要先将kubeadm.yml文件复制到其他机器,其他机器才能执行拉取镜像】
kubeadm config images pull --config kubeadm.yml
如果一个都没有拉取到,可能是配置daemon.json文件中的加速器没生效,可以用docker info查看一下
4、将kubeadm.yml文件复制到其他机器【在master节点执行】
将kubeadm.yml文件复制到node1的/root目录下:scp kubeadm.yml root@node1:/root
将kubeadm.yml文件复制到node2的/root目录下:scp kubeadm.yml root@node2:/root
4.3、使用kubeadm配置master节点
1、中途失败或是想修改配置可以使用kubeadm reset命令重置配置,再做初始化操作即可。
2、如果slave节点加入master时配置有问题可以在slave节点上使用kubeadm reset重置配置再使用kubeadm join命令重新加入即可。希望在master节点删除node,可以使用kubeadm delete nodes <NAME> 删除
1、初始化master节点【在master节点执行】:kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
2、配置kubectl:命令在“初始化master节点”输出结果中
3、在工作节点执行加入集群命令:命令在“初始化master节点”输出结果中
4、验证是否成功:kubectl get node
如果报错:[preflight] Running pre-flight checks
error execution phase preflight: [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
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
是因为:“2.6配置内核参数”没有成功,将2.6的命令再执行一次。
请备份好 kubeadm init 输出中的 kubeadm join 命令,因为您会需要这个命令来给集群添加节点。
如果忘记了Master的Token,可以在Master上输入以下命令查看:kubeadm token list
默认情况下Token过期是时间是24小时,如果Token过期以后,可以输入以下命令,生成新的Token
kubeadm token create
--discovery-token-ca-cert-hash的查看方法,在Master运行以下命令查看
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
初始化master节点kubeadm init执行过程说明:
init:指定版本进行初始化操作
preflight:初始化前的检查和下载所需要的 Docker 镜像文件
kubelet-start:生成 kubelet 的配置文件 var/lib/kubelet/config.yaml,没有这个文件 kubelet 无法启动,所以初始化之前的 kubelet 实际上启动不会成功
certificates:生成 Kubernetes 使用的证书,存放在 /etc/kubernetes/pki 目录中
kubeconfig:生成 KubeConfig 文件,存放在 /etc/kubernetes 目录中,组件之间通信需要使用对应文件
control-plane:使用 /etc/kubernetes/manifest 目录下的 YAML 文件,安装 Master 组件
etcd:使用 /etc/kubernetes/manifest/etcd.yaml 安装 Etcd 服务
wait-control-plane:等待 control-plan 部署的 Master 组件启动
apiclient:检查 Master 组件服务状态。
uploadconfig:更新配置
kubelet:使用 configMap 配置 kubelet
patchnode:更新 CNI 信息到 Node 上,通过注释的方式记录
mark-control-plane:为当前节点打标签,打了角色 Master,和不可调度标签,这样默认就不会使用 Master 节点来运行 Pod
bootstrap-token:生成 token 记录下来,后边使用 kubeadm join 往集群中添加节点时会用到
addons:安装附加组件 CoreDNS 和 kube-proxy
在master节点验证worker节点是否成功:kubectl get cs,nodes
确认每个组件都处于healthy状态
4.4、配置网络
1、查看pod状态
kubectl get pod -n kube-system -o wide
可以看出coredns尚未运行,此时我们还需要安装网络插件。
2、安装flannel network add-on
1、下载kube-flannel.yml文件:curl -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
我这里下载不了,直接用的老师给的kube-flannel.yml文件
2、编辑kube-flannel.yml内容
3、应用kube-flannel.yml配置创建服务: kubectl apply -f kube-flannel.yml
4、监控Pod的状态:watch kubectl get pod --all-namespaces -o wide
如果有的status不是Running,就需要排查问题
1、查看pod情况:kubectl get pod -n kube-system
2、查看某一个pod报错的详情
比如查看kube-flannel-ds-amd64-bjvqx报错的详情:kubectl describe pod kube-flannel-ds-amd64-bjvqx -n kube-system
如果是上图中的错误信息,就手动拉取镜像:docker pull quay.io/coreos/flannel:v0.12.0-amd64
然后通过docker images查看是否已经将flannel镜像拉取下来;【我这里反正是没有成功,后来我就将虚拟机删除,从安装,就好了,可能是中间那个命令没执行对】
4.5、验证dns集群是否可用【在master节点执行】
1、新建一个deployment
cd /opt/k8s/work
cat > my-nginx.yaml <<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx:1.7.9
ports:
- containerPort: 80
EOF
kubectl create -f my-nginx.yaml
2、查看副本:kubectl get deploy
3、生成nginx服务:kubectl expose deploy my-nginx
4、查看nginx服务是否创建成功:kubectl get services --all-namespaces |grep my-nginx
5、创建另一个Pod,查看/etc/resolv.conf是否包含 kubelet 配置的--cluster-dns和--cluster-domain,是否能够将服务my-nginx解析到上面显示的Cluster IP 10.107.5.77
cd /opt/k8s/work
cat > dnsutils-ds.yml <<EOF
apiVersion: v1
kind: Service
metadata:
name: dnsutils-ds
labels:
app: dnsutils-ds
spec:
type: NodePort
selector:
app: dnsutils-ds
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: dnsutils-ds
labels:
addonmanager.kubernetes.io/mode: Reconcile
spec:
template:
metadata:
labels:
app: dnsutils-ds
spec:
containers:
- name: my-dnsutils
image: tutum/dnsutils:latest
command:
- sleep
- "3600"
ports:
- containerPort: 80
EOF
kubectl create -f dnsutils-ds.yml
6、查看服务:kubectl get service
删除服务:如下图
删除服务后,设置master节点,也可以安排pod
7、# 所有主服务器都安排 pod
kubectl taint nodes --all node-role.kubernetes.io/master-
5、部署whoami 【在master节点执行】
1、在Master运行部署Whoami
kubectl create deployment whoami --image=idoall/whoami
2、查看Whoami部署状态
kubectl get deployments
3、查看Whoami的部署信息
kubectl describe deployment whoami
4、查看Whoami的pod信息
kubectl describe po whoami
5、为Whoami扩展端口;创建一个可以通过互联网访问的Whoami容器
kubectl create service nodeport whoami --tcp=80:80
6、查看当前的服务状态
kubectl get svc,pods -o wide
7、测试Whoami服务是否运行正常【端口是6查出的服务端口】
curl node1:31796
8、删除Whoami部署
kubectl delete deployment whoami
kubectl delete service whoami
6、安装Weave Scope监控集群
1、安装Scope:kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')&k8s-service-type=NodePort"
2、查看命名空间是否创建成功:kubectl get namespace
3、查看weave的service、deployments、pods:kubectl get service,deployments,pods -o wide -n weave
在浏览器输入IP加上图service/weave-scope-app的端口:192.168.0.35:30630,就可以看到监控界面了
更多推荐
所有评论(0)