kubeadm方式搭建kubernetes集群

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'

你可能感兴趣的:(kubernetes,docker)