搭建高可用Kubernetes集群之kubernetes集群搭建篇(三)


在搭建kubernetes集群之前,请参考我的文章搭建高可用Kubernetes集群之etcd集群搭建篇(一)完成各节点配置

Docker

每一个kubernetes集群节点都需要安装

  • 添加Docker源
    wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
  • 列出docker版本
    yum list docker-ce.x86_64 --showduplicates | sort -r
  • 安装docker
    yum install docker-ce-18.06.1.ce -y
  • 配置docker
    因为Docker自1.13版本起会自动设置iptables的FORWARD默认策略为DROP,这可能会影响Kubernetes集群依赖的报文转发功能,因此,需要在docker服务启动后,重新将FORWARD链的默认策略设置为ACCEPT。
    vim /usr/lib/systemd/system/docker.service
    在如下位置增加ExecStartPost这一行
image.png

systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service

因为DockerHub下载镜像的速度较缓慢,所以我这里使用我自己的阿里云加速镜像加速服务。
vim /etc/docker/daemon.json

image.png

systemctl restart docker.service

安装kubeadm kubelet kubectl

  • 添加Kubernetes源
    vim /etc/yum.repos.d/kubernetes.repo
image.png
  • 安装kubeadm kubelet kubectl
    yum install kubelet kubeadm kubectl

  • 配置kubelet
    因为我需要使用swap,所以需要添加如下来取消swap限制
    vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--fail-swap-on=false"

systemctl enable kubelet.service

配置初始化文件

  • master1
    vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.12.4
tokenTTL: 0
api:
  advertiseAddress: 192.168.88.97
  bindPort: 6443
  controlPlaneEndpoint: "192.168.88.201:6443"
apiServerCertSANs:   #每一个需要去访问apiserver的ip
- master1
- master2
- master3
- lb1
- lb2
- lb3
- gfs0
- gfs1
- gfs2
- 192.168.88.94
- 192.168.88.95
- 192.168.88.96
- 192.168.88.97
- 192.168.88.98
- 192.168.88.99
- 127.0.0.1
- 192.168.88.200
- 192.168.88.201 #vip
- 192.168.88.130
- 192.168.88.131
- 192.168.88.132
etcd:
  external:
    endpoints:
    - "https://192.168.88.90:2379"
    - "https://192.168.88.92:2379"
    - "https://192.168.88.93:2379"
    caFile: /etc/kubernetes/pki/etcd/etcd-ca.pem
    certFile: /etc/kubernetes/pki/etcd/etcd.pem
    keyFile: /etc/kubernetes/pki/etcd/etcd-key.pem
imageRepository: registry.cn-hangzhou.aliyuncs.com/csdc
kubeProxy:
  config:
    mode: "ipvs"
    ipvs:
      ExcludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      syncPeriod: 30s
kubeletConfiguration:
  baseConfig:
    cgroupDriver: cgroupfs
    clusterDNS:
    - 10.96.0.10
    clusterDomain: cluster.local
    failSwapOn: false
    resolvConf: /etc/resolv.conf
    staticPodPath: /etc/kubernetes/manifests
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
  • master2
    vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.12.4
tokenTTL: 0
api:
  advertiseAddress: 192.168.88.98
  bindPort: 6443
  controlPlaneEndpoint: "192.168.88.201:6443"
apiServerCertSANs:   #每一个需要去访问apiserver的ip
- master1
- master2
- master3
- lb1
- lb2
- lb3
- gfs0
- gfs1
- gfs2
- 192.168.88.94
- 192.168.88.95
- 192.168.88.96
- 192.168.88.97
- 192.168.88.98
- 192.168.88.99
- 127.0.0.1
- 192.168.88.200
- 192.168.88.201 #vip
- 192.168.88.130
- 192.168.88.131
- 192.168.88.132
etcd:
  external:
    endpoints:
    - "https://192.168.88.90:2379"
    - "https://192.168.88.92:2379"
    - "https://192.168.88.93:2379"
    caFile: /etc/kubernetes/pki/etcd/etcd-ca.pem
    certFile: /etc/kubernetes/pki/etcd/etcd.pem
    keyFile: /etc/kubernetes/pki/etcd/etcd-key.pem
imageRepository: registry.cn-hangzhou.aliyuncs.com/csdc
kubeProxy:
  config:
    mode: "ipvs"
    ipvs:
      ExcludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: ""
      syncPeriod: 30s
kubeletConfiguration:
  baseConfig:
    cgroupDriver: cgroupfs
    clusterDNS:
    - 10.96.0.10
    clusterDomain: cluster.local
    failSwapOn: false
    resolvConf: /etc/resolv.conf
    staticPodPath: /etc/kubernetes/manifests
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
  • master3
    vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1alpha2                     
kind: MasterConfiguration                               
kubernetesVersion: v1.12.4                              
tokenTTL: 0                                             
api:                                                    
  advertiseAddress: 192.168.88.99                       
  bindPort: 6443                                        
  controlPlaneEndpoint: "192.168.88.201:6443"           
apiServerCertSANs:   #每一个需要去访问apiserver的ip              
- master1                                               
- master2                                               
- master3                                               
- lb1                                                   
- lb2                                                   
- lb3                                                   
- gfs0                                                  
- gfs1                                                  
- gfs2                                                  
- 192.168.88.94                                         
- 192.168.88.95                                         
- 192.168.88.96                                         
- 192.168.88.97                                         
- 192.168.88.98                                         
- 192.168.88.99                                         
- 127.0.0.1                                             
- 192.168.88.200                                        
- 192.168.88.201 #vip                                   
- 192.168.88.130                                        
- 192.168.88.131                                        
- 192.168.88.132                                        
etcd:                                                   
  external:                                             
    endpoints:                                          
    - "https://192.168.88.90:2379"                      
    - "https://192.168.88.92:2379"                      
    - "https://192.168.88.93:2379"                      
    caFile: /etc/kubernetes/pki/etcd/etcd-ca.pem        
    certFile: /etc/kubernetes/pki/etcd/etcd.pem         
    keyFile: /etc/kubernetes/pki/etcd/etcd-key.pem      
imageRepository: registry.cn-hangzhou.aliyuncs.com/csdc 
kubeProxy:                                              
  config:                                               
    mode: "ipvs"                                        
    ipvs:                                               
      ExcludeCIDRs: null                                
      minSyncPeriod: 0s                                 
      scheduler: ""                                     
      syncPeriod: 30s                                   
kubeletConfiguration:                                   
  baseConfig:                                           
    cgroupDriver: cgroupfs                              
    clusterDNS:                                         
    - 10.96.0.10                                        
    clusterDomain: cluster.local                        
    failSwapOn: false                                   
    resolvConf: /etc/resolv.conf                        
    staticPodPath: /etc/kubernetes/manifests            
networking:                                             
  dnsDomain: cluster.local                              
  podSubnet: 10.244.0.0/16                              
  serviceSubnet: 10.96.0.0/12                           

需要把之前生成的etcd密钥放在master1节点的这个文件下 /etc/kubernetes/pki/etcd/
上述的镜像仓库地址是我的阿里云镜像仓库,上面已经有需要的镜像了,可以直接使用来下载。

拉取镜像

kubeadm config images pull --config kubeadm-config.yaml
并把pause镜像的名称改回原来的名称,如下
docker tag registry.cn-hangzhou.aliyuncs.com/csdc /pause:3.1 k8s.gcr.io/pause:3.1

初始化集群

做完以上操作之后,就可执行如下命令进行初始化

  • master1
    kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap
    执行成功会像下面一样
image.png

按照提示的操作执行命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

把kubernetes生成的密钥文件复制到各个master节点,如下:
scp -r /etc/kubernetes/pki root@master2:/etc/kubernetes/
scp -r /etc/kubernetes/pki root@master3:/etc/kubernetes/
补全操作:

cat << EOF > /etc/profile.d/kubernetes.sh 
source <(kubectl completion bash)
EOF
source /etc/profile.d/kubernetes.sh
  • master2
    删除其他master节点的apiserver的密钥防止冲突,如下
    rm -fr /etc/kubernetes/pki/{apiserver.crt,apiserver.key}
    kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap

按照提示的操作执行命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

补全操作:

cat << EOF > /etc/profile.d/kubernetes.sh 
source <(kubectl completion bash)
EOF
source /etc/profile.d/kubernetes.sh
  • master3
    删除其他master节点的apiserver的密钥防止冲突,如下
    rm -fr /etc/kubernetes/pki/{apiserver.crt,apiserver.key}
    kubeadm init --config kubeadm-config.yaml --ignore-preflight-errors=Swap

按照提示的操作执行命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

补全操作:

cat << EOF > /etc/profile.d/kubernetes.sh 
source <(kubectl completion bash)
EOF
source /etc/profile.d/kubernetes.sh
  • 在所有node主机上执行加入集群的命令
    kubeadm join 192.168.88.201:6443 --token 60yl6g.256rf16jt7a --discovery-token-ca-cert-hash sha256:8ece398f27a70cba97491a7cbeb8c93435fc7f0e7d8e1cb8aa4b0eee84 --ignore-preflight-errors=Swap

  • 查看集群状态(在任一主节点执行)
    kubectl get node

image.png

安装网络插件

从上图可以看出各个节点的状态还是未准备的状态,这是因为没有安装网络插件

  • 下载flannel插件
    任选一个主节点执行下列命令进行下载
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    然后把文件里的 - --iface=**改成你本机的网卡名就行,例如我的网卡名是eth0
    那么 - --iface=eth0(一共有五个地方需要修改)
    修改完成执行下面命令进行安装
    kubectl apply -f kube-flannel.yml
image.png

至此,Kubernetes的一些基本组件全部安装完成,如果你喜欢,请不要吝啬你的赞。如果有任何疑问,请直接评论或者私信我。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容