kubadm是官方社区推出的一个用于快速部署kubernetes集群的工具,会采用容器化方式部署kubernetes组件。该方式部署集群,在master节点也会运行kubelet。
规划:
ip |
角色 |
hostname |
系统 |
配置 |
192.168.227.100 |
master |
master_100 |
7.3 |
2c2g |
192.168.227.103 |
node |
node_103 |
7.3 |
1c1g |
192.168.227.104 |
node |
node_104 |
7.3 |
1c1g |
192.168.227.105 |
node |
node_105 |
7.3 |
1c1g |
准备:
内核为3.10及以上版本;
docker为18.03及以上版本;
各节点机器网络上互通(公网/内网均可),需要能访问外网;
hostname、mac地址、uuid需要各不相同唯一;
关闭swap;
master节点至少要2c2g;
配置ansible的hosts文件;(这里ansible配置在master上)
[test]
192.168.227.100
192.168.227.[103:105]
1、基础配置
关闭swap
ansible test -m shell -a "swapoff -a"
ansible test -m shell -a "sed -ri 's/.*swap.*/#&/' /etc/fstab"
关闭selinux
ansible test -m shell -a "setenforce 0"
ansible test -m shell -a "sed -i \"s/SELINUX=enforcing/SELINUX=disabled/\" /etc/selinux/config"
关闭firewalld
ansible test -m service -a "name=firewalld state=stopped"
ansible test -m service -a "name=firewalld enabled=no"
修改hostname
hostnamectl set-hostname master_100
修改hosts文件
ansible test -m copy -a "src=/etc/hosts dest=/etc/hosts"
[root@master_100 ansible]# cat /etc/hosts
192.168.227.100 master_100
192.168.227.103 node_103
192.168.227.104 node_104
192.168.227.105 node_105
2、安装docker
略
3、配置kubernetes集群
所有节点:
# 配置yum源
ansible test -m copy -a "src=/etc/yum.repos.d/kubernetes.repo dest=/etc/yum.repos.d/kubernetes.repo"
[root@master_100 ansible]# cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
# kubectl在管理连接集群的主机安装即可,主机不需要是集群中的,网络互通即可
yum install kubelet-1.21.0-0 kubeadm-1.21.0-0 kubectl-1.21.0-0 -y
systemctl enable kubelet
初始化集群:(多master节点集群,在某一master节点上初始化即可)
# 1)cmd方式
## --image-repository指定使用阿里云的镜像仓库,默认使用的海外的
## 初始化完成后会返回工作节点带token join命令
kubeadm init \
--kubernetes-version=v1.21.0 \
--apiserver-advertise-address=192.168.227.100 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=172.16.0.0/16 \
--service-cidr=10.96.0.0/16 \
--ignore-preflight-errors=all
# 2)config文件方式
## 默认初始化配置参数文件导出,修改
kubeadm config print init-defaults > init-default.yaml
## 指定配置文件初始化集群
kubeadm init --config=init-config.yaml
加入集群:
# 1)cmd方式
## master节点
kubeadm init phase upload-certs --upload-certs
## 结合node节点加入key构建master节点加入完整命令
kubeadm join 192.168.227.100:6443 --token e667el.4j0ou1gw1dbdo67q \
--discovery-token-ca-cert-hash sha256:e8edfa469a4624871b0f55cee \
--control-plane --certificate-key 157567992c66bd7ec01436a5f5de4ef2cf \
--ignore-preflight-errors=all
## node节点
## 运行node节点加入命令
kubeadm join 192.168.227.100:6443 --token e667el.4j0ou1gw1dbdo67q \
--discovery-token-ca-cert-hash sha256:e8edfa469a4624871b0f55cee
# 2)config文件方式
## 创建配置文件,内容格式如下
cat join-config.yml
apiVersion: kubeadm.k8s.io/v1beta1
kind: JoinConfiguration
discovery:
bootstrapToken:
apiServerEndpoint: 192.168.227.100:6443
token: e667el.4j0ou1gw1dbdo67q
unsafeSkipCAVerification: true
tlsBootStrapToken: sha256:e8edfa469a4624871b0f55cee
kubeadm join --config=join-config.yml
4、kubectl配置:
kubectl是一个命令行工具,可以通过该工具来操作管理kubernetes集群。
配置文件放在在$HOME/.kube目录,可通过设置KUBECONFIG环境变量或者命令参数--kubeconfig来指定其它位置的配置文件。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5、核验集群:
kubectl get node
kubectl get node node103 -o yaml
其它:
1、网络插件:
解决容器跨宿主机网络互通问题。
目前kubeadm本身不带配置,需要在集群搭建完成后自行安装配置第三方插件解决,如:Flannel、Calico、Weave、Open vSwitch等。
配置calico:
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
kubectl apply -f calico.yaml
2、dashboard:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
mv recommended.yaml dashboard.yaml
vim dashboard.yaml
# 将service部分加上type: NodePort,并加上nodePort: 30008端口
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30008
selector:
k8s-app: kubernetes-dashboard
kubectl apply -f dashboard.yaml
登录dashboard:
获取初始默认用户token后,使用浏览器访问dashboard url即可。
# 获取默认用户token
kubectl describe secrets $(kubectl get secrets -n kubernetes-dashboard | awk '/kubernetes-dashboard-token/{print $1}' ) -n kubernetes-dashboard |sed -n '/token:.*/p'
默认用户只能看到default namespace资源权限不足,可以创建个集群级别管理员角色。
# 创建serviceaccount
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 绑定集群管理员
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
# 获取token
kubectl describe secrets $(kubectl get secrets -n kubernetes-dashboard | awk '/dashboard-admin-token/{print $1}' ) -n kubernetes-dashboard |sed -n '/token:.*/p'