kubernetes学习笔记1-集群部署
个人CKA学习笔记,大部分内容源于《CKA/CKAD应试指南-从Docker到Kubernetes完全攻略》一书。
kubernetes学习笔记1-集群部署
kuberbetes架构及组件介绍
master上运行的组件及作用
组件名称 | 作用 |
---|---|
kubectl | 命令行工具,通过他来创建,删除资源 |
api-server | 接口,用来接收用户发送的请求 |
scheduler | 调度器,创建pod时,判定在哪个worker上工作 |
controller-manager | 监测节点状态,pod数目等 |
worker上运行的组件及作用
组件名称 | 作用 |
---|---|
kubelet | 代理,接受master分配过来的任务,并将节点信息反馈给master上的api-server |
kube-proxy | 用于把发送个service的请求转发给后端的pod,其模式有iptables和ipvs |
calico | 使节点中的pod能够互相通信 |
安装
环境介绍
IP | HOSTNAME | mem | OS | role |
---|---|---|---|---|
192.168.122.100 | k8s-m.fushisanlang.cn | 4GB | CentOS Linux release 7.9.2009 (Core) | master and worker |
192.168.122.101 | k8s-s1.fushisanlang.cn | 4GB | CentOS Linux release 7.9.2009 (Core) | worker |
192.168.122.102 | k8s-s2.fushisanlang.cn | 4GB | CentOS Linux release 7.9.2009 (Core) | worker |
环境准备
在安装kubernetes前,需要的主机进行一些设置,这些设置需要在所有主机
上进行操作。
- 配置hosts或 配置简易DNS服务器,使所有主机间的hostname可以互相识别
1 | echo '192.168.122.100 k8s-m.fushisanlang.cn' >> /etc/hosts |
- 关闭防火墙及selinux
1 | systemctl stop firewalld |
关闭swap
1
2swapoff -a
sed -i '/swap/s/UUID/#UUID/g' /etc/fstab配置yum源
1
2
3
4
5
6
7cd /etc/yum/repos.d/
mkdir bak
mv *bak
wget https://download.fushisanlang.cn/yum.repos/CentOS-Base.repo
wget https://download.fushisanlang.cn/yum.repos/docker-ce.repo
wget https://download.fushisanlang.cn/yum.repos/epel.repo
wget https://download.fushisanlang.cn/yum.repos/k8s.repo安装docker并配置自启
1
2yum install docker-ce -y
systemctl enable docker --now设置内核参数
1
2
3
4
5echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.d/k8s.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/k8s.conf
sysctl -p /etc/sysctl.d/k8s.conf
注意需要先启动docker再修改参数,不然会报错安装软件包
1
2yum install -y kubelet-1.21.1-0 kubeadm-1.21.1-0 kubectl-1.21.1-0 --disableexcludes=kubernetes
如果安装时没有指定版本,则安装的是最新版本启动kubelet
1
2systemctl restart kubelet
systemctl enable kubelet
安装master
在master节点操作
初始化集群
因为网络问题,使用阿里云的镜像仓库进行集群搭建。
由于阿里云缺少coredns镜像,需要先从ftp.rhce.cc/cks-tool/coredns-1.21.tar处下载,1
2
3
4
5
6
7
8
9
10
11
12由于阿里云缺少coredns镜像,需要提前下载
wget ftp.rhce.cc/cks-tool/coredns-1.21.tar -O /tmp/coredns-1.21.tar
docker load -i /tmp/coredns-1.21.tar
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \ #指定阿里云的镜像仓库
--kubernetes-version=v1.21.1 \ #指定安装版本,需要提前安装对应版本的kubectl,kubeadm,kubelet
--pod-network-cidr=10.244.0.0/16 #指定pod的网段
上述命令执行之后,会有一个用于将worker加入集群的命令提示:
kubeadm join 192.168.122.100:6443 --token i5sqtk.ekvz51wnlt5ujmyo --discovery-token-ca-cert-hash sha256:cd8db6e508b5d15a3e87217c3c5b8b085735c023b8f6446e1c3315831000763b
如果看见类似提示,说明初始化成功复制kubeconfig文件
1
2
3mkdir -p ~/.kube
cp -i /etc/kubernetes/admin.conf ~/.kube/config
chown root:root ~/.kube/config创建token
初始化集群过程中,生成的token有效期一般只有24小时,如果忘记保存或者超过有效期了,就要重新生成1
2
3kubeadm token list #查看token
kubeadm token create #生成token
kubeadm token create --print-join-command #获取加入集群的命令,可以直接在worker节点上粘贴
配置worker加入集群
在workerr节点操作
1 | kubeadm join 192.168.122.100:6443 --token i5sqtk.ekvz51wnlt5ujmyo --discovery-token-ca-cert-hash sha256:cd8db6e508b5d15a3e87217c3c5b8b085735c023b8f6446e1c3315831000763b |
安装calico网络
- 查看节点状态
在master节点操作
1 | kubectl get nodes |
- 下载用于配置calico的yaml
在master节点操作
1 | wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml --no-check-certificate |
- 修改配置
在master节点操作
1 | vim calico.yaml |
1 | #找到CALICO_IPV4POOL_CIDR配置 |
准备镜像
在三个节点都要操作
1
2
3
4
5
6
7
8
9
10
11grep image calico.yaml
会显示出需要的镜像如下:
image: docker.io/calico/cni:v3.19.4
image: docker.io/calico/cni:v3.19.4
image: docker.io/calico/pod2daemon-flexvol:v3.19.4
image: docker.io/calico/node:v3.19.4
image: docker.io/calico/kube-controllers:v3.19.4
在三台机器上通过docker pull命令提前准备好所有镜像,如果不在worker上准备镜像,会导致安装失败
准备好后开始安装
kubectl apply -f calico.yaml验证结果
在master节点操作
1
2
3
4
5
6kubectl get nodes
此时可以发现status都是Ready的状态了
NAME STATUS ROLES AGE VERSION
k8s-m.fushisanlang.cn Ready control-plane,master 2d21h v1.21.1
k8s-s1.fushisanlang.cn Ready <none> 3h35m v1.21.1
k8s-s2.fushisanlang.cn Ready <none> 2d21h v1.21.1设置命令tab补全
在master节点操作
安装bash-completion
1
yum install -y bash-completion
配置环境变量
1
2sed '2asource <(kubectl completion bash)' -i /etc/profile
source /etc/profile
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 符十三郎!