オペレーティングシステムはCentos7.364ビットを使用します。詳細は次のとおりです。
[ root@k8s-master ~]# uname -a
Linux k8s-master 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 1922:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[ root@k8s-master ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511(Core)
この記事では、k8sの動作環境を展開するための3台のマシンを用意しました。詳細は次のとおりです。
ノードと関数 | ホスト名 | IP |
---|---|---|
master、etcd、registry | k8s-master | 10.211.55.6 |
node1 | k8s-node-1 | 10.211.55.7 |
node2 | k8s-node-2 | 10.211.55.8 |
3台のマシンのホスト名を設定します。マスターで実行:
1 | [ root@localhost ~]# hostnamectl --static set-hostname k8s-master |
---|
node1で実行します。
1 | [ root@localhost ~]# hostnamectl --static set-hostname k8s-node-1 |
---|
node2で実行します。
1 | [ root@localhost ~]# hostnamectl --static set-hostname k8s-node-2 |
---|
3台のマシンでホストをセットアップするには、次のコマンドを実行します。
echo '10.211.55.6 k8s-master
10.211.55.6 etcd
10.211.55.6 registry
10.211.55.7 k8s-node-110.211.55.8 k8s-node-2' >>/etc/hosts
systemctl disable firewalld.service
systemctl stop firewalld.service
K8sの実行はetcdに依存しているため、etcdを最初にデプロイする必要があります。この記事では、yumを使用して以下をインストールします。
1 | # yum install -y etcd |
---|
yumによってインストールされたetcdのデフォルト構成ファイルは / etc / etcd / etcd.conf
にあります。構成ファイルを編集して、次の情報を変更します。
ETCD_NAME=master
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379,http://etcd:4001"
開始してステータスを確認します
# systemctl start etcd
# systemctl enable etcd
# etcdctl set testdir/testkey0 00
# etcdctl get testdir/testkey0
0
# etcdctl -C http://etcd:4001 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy
# etcdctl -C http://etcd:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://0.0.0.0:2379
cluster is healthy
拡張機能:Etcdクラスターの展開を参照-[http://www.cnblogs.com/zhenyuyaodidiao/p/6237019.html](http://www.cnblogs.com/zhenyuyaodidiao/p/6237019.html)
1 | [ root@k8s-master ~]# yum install -y docker |
---|
レジストリから画像をプルできるようにします。次の行を追加します:OPTIONS = '– insecure-registry Registry:5000'
[ root@k8s-master ~]# vim /etc/sysconfig/docker
# /etc/sysconfig/docker
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'if[-z "${DOCKER_CERT_PATH}"]; then
DOCKER_CERT_PATH=/etc/docker
fi
OPTIONS='--insecure-registry registry:5000'
cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sed -i "s|ExecStart=/usr/bin/dockerd-current|ExecStart=/usr/bin/dockerd-current --registry-mirror=<your accelerate address>|g"/etc/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker.service
# systemctl enable docker.service
# systemctl restart docker.service
1 | [ root@k8s-master ~]# yum install -y kubernetes |
---|
docker pull registry:2
//レジストリデータの管理とバックアップを容易にするために、レジストリデータボリュームをローカルに関連付けます
docker run -d -p 5000:5000 --name registry -v /data/registry:/var/lib/registry registry:2
次のコンポーネントは、kubernetesマスターで実行する必要があります。
それに応じて、次の構成で色情報を変更します。
/ etc / kubernetes / apiserver
を変更します####KUBE_API_ADDRESS=”–insecure-bind-address=0.0.0.0”
KUBE_API_PORT=”–port=8080”
KUBE_ETCD_SERVERS=”–etcd-servers=http://etcd:2379“
KUBE_ADMISSION_CONTROL=”–admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota”
/ etc / kubernetes / config
を変更します####1 | KUBE_MASTER="–master=http://k8s-master:8080" |
---|
# systemctl enable kube-apiserver.service
# systemctl start kube-apiserver.service
# systemctl enable kube-controller-manager.service
# systemctl start kube-controller-manager.service
# systemctl enable kube-scheduler.service
# systemctl start kube-scheduler.service
マスターのドッカーのインストール手順を参照してください
マスターのkubernetsのインストール手順を参照してください
次のコンポーネントは、kubernetesノードで実行する必要があります。
これに対応して、次の構成情報を変更する必要があります。
1 | KUBE_MASTER="–master=http://k8s-master:8080" |
---|
KUBELET_ADDRESS="–address=0.0.0.0"
KUBELET_HOSTNAME="–hostname-override=k8s-node-1"(2番目のステーションはk8を書き込む必要があることに注意してください-node-2)
KUBELET_API_SERVER="–api-servers=http://k8s-master:8080"
マスター上のクラスター内のノードとノードステータスを表示します
# kubectl -s http://k8s-master:8080get node
NAME STATUS AGE
k8s-node-1 Ready 3m
k8s-node-2 Ready 16s
# kubectl get nodes
NAME STATUS AGE
k8s-node-1 Ready 3m
k8s-node-2 Ready 43s
これまでに、kubernetesクラスターが構築されました。
インストールするマスターとノードで次のコマンドを実行します
1 | # yum install -y flannel |
---|
マスターとノードの両方で/ etc / sysconfig / flanneldを編集し、次の構成を変更します。
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
Flannelは、構成にEtcdを使用して、複数のFlannelインスタンス間の構成の一貫性を確保するため、etcdでは次の構成が必要です。
# etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }'{"Network":"10.0.0.0/16"}
Flannelを起動した後、dockerとkuberneteを順番に再起動する必要があります。マスターで実行:
systemctl enable flanneld.service
systemctl start flanneld.service
service docker restart
systemctl restart kube-apiserver.service
systemctl restart kube-controller-manager.service
systemctl restart kube-scheduler.service
ノードで実行:
systemctl enable flanneld.service
systemctl start flanneld.service
service docker restart
systemctl restart kubelet.service
systemctl restart kube-proxy.service
Flannelは、k8sで最も単純なネットワークと見なされています。ここでは、Flannelネットワークを理解するのに役立つ[記事](http://tonybai.com/2017/01/17/understanding-flannel-network-for-kubernetes/)を見つけることができます。
# docker pull nginx #外部ネットワークレジストリからnginxミラーをプルします
# docker tag nginx registry:5000/nginx #ローカルミラーにタグを付ける
# docker push registry:5000/nginx #ローカルレジストリにプッシュ
# docker rmi registry:5000/nginx #ローカルミラーを削除する
cat << EOF >nginx.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas:2
template:
metadata:
labels:
app: nginx
spec:
containers:- name: nginx
image: registry:5000/nginx
ports:- containerPort:80
resources:
requests:
cpu: 400m
EOF
# kubectl create -f nginx.yaml #nginxを作成する-dpmtの展開
cat << EOF >nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
labels:
app: nginx-svc
spec:
type: NodePort
selector:
app: nginx
ports:- port:80
targetPort:80
nodePort:30088
EOF
# kubectl create -f nginx-svc.yaml #nginxを作成する-svcサービス
# kubectl describe service nginx-svc
Name: nginx-svc
Namespace:default
Labels: app=nginx-svc
Selector: app=nginx
Type: NodePort
IP:10.254.53.185
Port:<unset>80/TCP
NodePort:<unset>30088/TCP
Endpoints:10.0.19.2:80,10.0.4.2:80
Session Affinity: None
No events.
# curl http://k8s-node-1:30088/ #nodePortを介してnginxサービスをテストします
テスト中に2つの問題が発生しました。
nginx-svc.yaml
ファイルの spec.selector.app
の名前が、 nginx.yaml
の spec.template.metadata.labels.app
と一致していないため、NodePortを介してサービスにアクセスできません。Recommended Posts