前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubeadm一键部署Kubernetes(CentOS 7.5+)

kubeadm一键部署Kubernetes(CentOS 7.5+)

原创
作者头像
运维搬砖
修改2019-06-17 09:57:56
1.7K0
修改2019-06-17 09:57:56
举报
文章被收录于专栏:LeorizonLeorizon

一、操作系统环境初始化:

1、节点规划

准备部署一个 一主两从三节点 Kubernetes集群,整体节点规划如下表所示:

主机名

IP

角色

k8s-master

192.168.189.159

k8s主节点

k8s-node-1

192.168.189.151

k8s从节点

k8s-node-2

192.168.189.152

k8s从节点

下面介绍一下各个节点的软件版本:

  • 操作系统:CentOS-7.6-64Bit
  • Docker版本:1.13.1 +
  • Kubernetes版本:1.14.2 +

所有节点都需要安装以下组件:

  • Docker:不用多说了吧
  • kubelet:运行于所有 Node上,负责启动容器和 Pod
  • kubeadm:负责初始化集群
  • kubectl: k8s命令行工具,通过其可以部署/管理应用 以及CRUD各种资源

2、系统设置:

1)关闭防火墙:

代码语言:javascript
复制
systemctl disable firewalld.service && systemctl stop firewalld.service 

2)禁用SELINUX

代码语言:javascript
复制
setenforce 0 
sed -i 's/^SELINUX=enforcing$/SELINUX= disabled/' /etc/selinux/config 

# 检查是否关闭 
cat /etc/selinux/config 

3)禁用swap分区(kubernetes不支持swap分区)

代码语言:javascript
复制
swapoff -a  
vim /etc/fstab    
# 将swap分区删除或者注释掉,或者在安装操作系统时不创建swap分区 

4)设置各节点主机名

代码语言:javascript
复制
hostnamectl --static set-hostname  k8s-master 
hostnamectl --static set-hostname  k8s-node-1 
hostnamectl --static set-hostname  k8s-node-2 

5)所有节点 主机名/IP加入 hosts解析

代码语言:javascript
复制
vim /etc/hosts  
192.168.189.159 k8s-master
192.168.189.151 k8s-node-1
192.168.189.152 k8s-node-2

6)centos7的用户还需要:

代码语言:javascript
复制
cat <<EOF >  /etc/sysctl.d/k8s.conf 
net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
EOF 

sysctl --system 

7)向系统添加docker和kubernetes软件依赖源

docker-ce.repo (使用阿里云镜像仓库)

代码语言:javascript
复制
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

创建kubernetes.repo文件 (使用阿里云镜像仓库)

代码语言:javascript
复制
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 

8)安装docker-ce,每个节点都要安装

代码语言:javascript
复制
yum install docker-ce -y

docker version

#设置开机启动docker和启动docker服务
systemctl enable docker && systemctl start docker

9)安装kubernetes服务,每个节点都要安装

代码语言:javascript
复制
指定版本安装:
yum install kubelet-1.13.1 kubeadm-1.13.1 kubectl-1.13.1 kubernetes-cni-0.6.0

安装最新版:
yum install kubelet kubeadm kubectl -y

查看kubelet的版本:
kubeadm version
kubectl version

设置开机启动kubel、启动kubelet
systemctl enable kubelet 
systemctl start kubelet
systemctl restart kubelet

10)初始化Master主节点:

代码语言:javascript
复制
# 可以在初始话master之前下载镜像
kubeadm config images pull

kubeadm init \
--apiserver-advertise-address=192.168.189.159 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.14.2 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
  • --kubernetes-version: 用于指定 k8s版本
  • --apiserver-advertise-address:用于指定使用 Master的哪个network interface进行通信,若不指定,则 kubeadm会自动选择具有默认网关的 interface
  • --pod-network-cidr:用于指定Pod的网络范围。该参数使用依赖于使用的网络方案。
  • --service--cidr:负载均衡的IP地址段

11)Master节点加入Kubernetes集群

代码语言:javascript
复制
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

12)pod网络部署到集群中

代码语言:javascript
复制
wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

docker pull lizhenliang/flannel:v0.11.0-amd64
kubectl apply -f kube-flannel.yml

# 查看核心组件运行状态
kubectl get pods -n kube-system
kubectl get pods --all-namespaces -o wide

13)Node节点加入Kubernetes集群当中

在初始化Master主节点成功后,控制台会有一串 kubeadm join 192.168.189.159:6443......的信息,将其保存下来,那是在node节点加入master节点时执行的语句。

代码语言:javascript
复制
 kubeadm join 192.168.189.159:6443 \
--token 9l4mpr.j3gj2beqxpa9dhzm \
--discovery-token-ca-cert-hash sha256:\
1d1eeb6347deef4132c6c3b570fea80345f42a2381795ed198afa60cdd0c1fe0

14)安装dashboard

代码语言:shell
复制
wget https://raw.githubusercontent.com/kubernetes/dashboard/master\
/aio/deploy/recommended/kubernetes-dashboard.yaml

vim kubernetes-dashboard.yaml
1、修改Dashboard Deployment 的 dashboard的镜像地址
 spec:
      containers:
      - name: kubernetes-dashboard
        image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.0
2、修改 Dashboard Service 网络类型
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000
      
创建dashboard
kubectl apply -f kubernetes-dashboard.yaml

15)创建dashboard-serviceaccount的账号,用于kubernetes-dashboard来操作访问

代码语言:shell
复制
kubectl create serviceaccount dashboard-serviceaccount -n kube-system
kubectl create clusterrolebinding dashboard-cluster-admin \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:dashboard-serviceaccount

kubectl get secret -n kube-system |grep dashboard-serviceaccount-token
kubectl describe secret -n kube-system dashboard-serviceaccount-token-5c7v2 

16)小技巧:

代码语言:javascript
复制
小技巧,由于后面的操作都是在 kube-system 名称空间中进行,
可以设置个别名:ksys=kubectl -n kube-system 
这样就可以使用ksys操作该名称空间了
命令参考:alias ksys='kubectl -n kube-system'

比如查看k8s系统服务外网暴露端口:
可以这样:kubectl get service --namespace=kube-system
也可以简写为这样:ksys get svc

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档